VS2017+OpenCV3.4.1+opencv_contrib3.4.1配置(体验跟踪算法)

本人最近在研究跟踪算法,查阅资料得知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 找到如下路径,然后复制该路径。

1.2 按下述步骤将上述地址添加到环境变量。

注意:每次更改环境变量后重启电脑方能有效。

2.打开Visual Studio 2017,新建一个空项目,然后新建一个空的C++文件。

2.1首先新建一个空项目。文件->新建->项目->空项目或者使用快捷键crtl+shift+N,选择名称和路径后,点击确定。出现如下界面

该视图是在解决方案资源管理器下才能看到的,如果没打开,可在最上面工具栏中选择视图->解决方案资源管理器打开

2.2 在源文件中添加C++文件,右键源文件->添加->新建项->C++文件->添加或者直接快捷键crtl+shift+A,如下

3.然后打开属性管理器。视图->其他窗口->属性管理器

4.打开属性窗口。右键Debug|x64->属性。

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

 

6.然后按照同样的添加方式将OpenCV库目录添加到VC++目录的“库目录”中。

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

7.添加openCV的附加依赖库到链接器->输入->附加依赖项.添加后界面如图。

在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。这样下次新建工程项目时便自动调用了该设置,不需要再次配置。如图。

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.第一帧图像,框选跟踪区域。

2.跟踪过程:

见到如上现象,说明VS+OpenCV3.4.1+opencv_contrib3.4.1配置成功,同时跟踪算法成功运行。同时可以更换函数来更换不同跟踪算法进行比较与体验。参考上述代码中注释。

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值