天天看點

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

本人最近在研究跟蹤算法,查閱資料得知Opencv 3自帶跟蹤算法,內建在opencv_contrib庫中,需要從GitHub下載下傳,然後利用源碼編譯。于是本人嘗試了一下,發現編譯及配置過程不僅花費時間很長(前後大概4個小時),而且容易出錯。本人想直接下載下傳網上編譯好的install檔案進行配置,發現大部分都需要積分。是以無奈自己編譯,經曆一番配置,最終成功測試跟蹤算法。

為了友善同樣在研究跟蹤算法的博友,在此特地分享自己cmake過,且在VS 2017環境下編譯成功的install檔案(同時包括Debug以及Release的依賴庫)的百度雲連結,友善大家下載下傳且配置。

百度雲連結為:https://pan.baidu.com/s/1JSn2rnaDE1ENk-JF21Bcag 提取碼:f0c9

接下來分享在下載下傳好install檔案之後對VS 2017+Opencv3.4.1+opencv_contrib3.4.1的配置,使其可以實作跟蹤算法。

OpenCV+opencv_contrib配置

1.首先将OpenCV庫路徑(D:\OpenCV3.4.1\opencv-3.4.1build\install\x64\vc15\bin)增加的系統環境變量Path中。

注意:本人的路徑可能和你的不同,本人的檔案都是在install目錄,但是你從百度雲下載下傳的檔案是被我重新命名的opencv3.4.1+opencv_contrib3.4.1,不過内容是一緻的。是以需要添加你自己的庫路徑(\x64\vc15\bin)。

1.1 找到如下路徑,然後複制該路徑。

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

1.2 按下述步驟将上述位址添加到環境變量。

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

注意:每次更改環境變量後重新開機電腦方能有效。

2.打開Visual Studio 2017,建立一個空項目,然後建立一個空的C++檔案。

2.1首先建立一個空項目。檔案->建立->項目->空項目或者使用快捷鍵crtl+shift+N,選擇名稱和路徑後,點選确定。出現如下界面

該視圖是在解決方案資料總管下才能看到的,如果沒打開,可在最上面工具欄中選擇視圖->解決方案資料總管打開

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

2.2 在源檔案中添加C++檔案,右鍵源檔案->添加->建立項->C++檔案->添加或者直接快捷鍵crtl+shift+A,如下

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

3.然後打開屬性管理器。視圖->其他視窗->屬性管理器

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗
VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

4.打開屬性視窗。右鍵Debug|x64->屬性。

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

5.為工程配置包含目錄,把OpenCV的如下三個目錄增加到VC++的包含目錄屬性清單中。

(1)D:\OpenCV3.4.1\opencv-3.4.1build\install\include

(2)D:\OpenCV3.4.1\opencv-3.4.1build\install\include\opencv

(3)D:\OpenCV3.4.1\opencv-3.4.1build\install\include\opencv2

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗
VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

6.然後按照同樣的添加方式将OpenCV庫目錄添加到VC++目錄的“庫目錄”中。

D:\OpenCV3.4.1\opencv-3.4.1build\install\x64\vc15\lib

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

7.添加openCV的附加依賴庫到連結器->輸入->附加依賴項.添加後界面如圖。

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

在Debug模式下添加"opencv_world340d.lib"以及"opencv_img_hash341d.lib"

在Release模式下田間“opencv_world340.lib"以及"opencv_img_hash341.lib"

(Release模式就是上述第4步,右鍵Release|x64,之後其他步驟都一樣)

注意:上述兩種模式隻能選擇一種模式編譯,此處我們使用Debug模式。

8.接下來很重要的一步,打開Debug|x64,右鍵其下面的Microsoft.Cpp.x64.user,然後點選儲存Microsoft.Cpp.x64.user。這樣下次建立工程項目時便自動調用了該設定,不需要再次配置。如圖。

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

9.到此,我們就完成了一次性在Visual Studio 2017配置OpenCV3.4.1+opencv_contrib3.4.1,實作永久有效。然後重新開機電腦,重新開機VS 2017,配置成功。

跟蹤算法體驗

為了體驗跟蹤算法,我們打開剛剛建立的項目。在C++檔案中寫入如下代碼。

#include <opencv2/opencv.hpp> 
#include <opencv2/video.hpp> 
#include <opencv2/tracking.hpp>
#include <opencv2/tracking/tracker.hpp>
using namespace cv;
void draw_rectangle(int event, int x, int y, int flags, void*);
Mat firstFrame;
Point previousPoint, currentPoint;
Rect2d bbox;
int main(int argc, char *argv[]) 
{ 
	//啟用攝像頭進行跟蹤
	VideoCapture capture(0);
	Mat frame; 
	capture >> frame;
	//使用事先錄好的視訊進行檢驗
	//VideoCapture capture;
	//frame = capture.open("E:\\imagelib\\1.avi"); 
	if(!capture.isOpened()) 
	{
		printf("can not open ...\n"); 
		return -1; 
	} //擷取視訊的第一幀,并框選目标 
	capture.read(firstFrame);
	if(!firstFrame.empty()) 
	{ 
		namedWindow("output", WINDOW_AUTOSIZE);
		imshow("output", firstFrame); 
		setMouseCallback("output", draw_rectangle, 0); 
		waitKey();
	}

	//使用不同跟蹤算法進行跟蹤 
	//Ptr<TrackerMIL> tracker= TrackerMIL::create(); 
	//Ptr<TrackerTLD> tracker= TrackerTLD::create();									   
	Ptr<TrackerKCF> tracker = TrackerKCF::create();																		   
	//Ptr<TrackerMedianFlow> tracker = TrackerMedianFlow::create();										  
	//Ptr<TrackerBoosting> tracker= TrackerBoosting::create(); 

	capture.read(frame);
	tracker->init(frame,bbox);
	namedWindow("output", WINDOW_AUTOSIZE);
	while (capture.read(frame)) 
	{ 
	tracker->update(frame,bbox);
	rectangle(frame,bbox, Scalar(255, 0, 0), 2, 1); 
	imshow("output", frame); 
	if(waitKey(20)=='q') return 0; 
	} 
	capture.release(); 
	destroyWindow("output"); return 0; 
	} //框選目标 
	void draw_rectangle(int event, int x, int y, int flags, void*) 
	{
		if (event == EVENT_LBUTTONDOWN) { previousPoint = Point(x, y); } 
		else if (event == EVENT_MOUSEMOVE && (flags&EVENT_FLAG_LBUTTON))
		{ 
			Mat tmp; firstFrame.copyTo(tmp); 
			currentPoint = Point(x, y); 
			rectangle(tmp, previousPoint, currentPoint, Scalar(0, 255, 0, 0), 1, 8, 0);
			imshow("output", tmp);
		}
		else if (event == EVENT_LBUTTONUP)
		{ 
			bbox.x = previousPoint.x;
			bbox.y = previousPoint.y;
			bbox.width = abs(previousPoint.x-currentPoint.x);
			bbox.height = abs(previousPoint.y-currentPoint.y);
		} 
		else if (event == EVENT_RBUTTONUP) { destroyWindow("output");
		} 
	}
           

運作後,會打開攝像頭,然後檢測到第一幀圖檔。然後可以利用滑鼠框選所要跟蹤區域,右鍵确定。然後螢幕會出現一個藍色的方框,跟蹤框選區域。可聚焦圖像視窗,按q鍵退出跟蹤。

KCF算法運作結果如下:

1.第一幀圖像,框選跟蹤區域。

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

2.跟蹤過程:

VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(體驗跟蹤算法)OpenCV+opencv_contrib配置跟蹤算法體驗

見到如上現象,說明VS+OpenCV3.4.1+opencv_contrib3.4.1配置成功,同時跟蹤算法成功運作。同時可以更換函數來更換不同跟蹤算法進行比較與體驗。參考上述代碼中注釋。

繼續閱讀