追踪算法KCF体验

本文使用KCF的opencv版本实现。

对应论文:High-Speed Tracking with Kernelized Correlation Filters

编译环境:VS2015 + win7 64位


相关软件下载安装

需要下载opencv3.10,opencv_contrib和cmake-gui。

追踪算法KCF体验_第1张图片

图:opencv下载说明

追踪算法KCF体验_第2张图片

图:opencv_contrib下载说明

追踪算法KCF体验_第3张图片

图:cmake下载说明


cmake下载的是免安装版本,解压缩之后打开cmake-gui就能直接运行。

将下载的3个文件安装/解压缩。

一.编译

打开bin目录下的cmake-gui.exe。

编译分为在x86和x64下2中编译方式,默认是使用x86编译。

1.      source code路径选择opencv3.1下的sources文件夹,build路径可以自己新建一个文件夹进行存放,如下图:

追踪算法KCF体验_第4张图片


2.      打开Tool---Configure,如果想生成x86下的库,则选择Visual Studio 14 2015;如果想生成x64下的库,则选择Visual Studio 14 2015 Win64。然后点击Finish。如下图:

追踪算法KCF体验_第5张图片

等待一段时间,软件会自动配置。

 

3.      配置完成后,找到OPENCV_EXTRA_MODULES_PATH,将opencv_contrib的目录放进去。如下图,我的opencv_contrib路径为D:/opencv/opencv_contrib-master/modules

追踪算法KCF体验_第6张图片


4.      点击Generate,等待配置完成。


Visual Studio 2015编译

1.      找到之前新建的newBuild目录,打开新生成的OpenCV.sln。

2.      在解决方案资源管理器中,选中“解决方案‘OpenCV’”,右键-->重新生成解决方案。

3.      依旧是资源管理器中,找到CMakeTargets中的INSTALL,右键-->仅用于项目-->仅生成INSTALL。注:想要Debug版(格式为opencv_xxxx310d.lib)的和Release版(格式为opencv_xxxx310.lib)的lib的话,分别选择Debug和Release以后,生成两遍就可以了。完成后,D:/OpenCV3.1/sources/newBulid/install下会有很多东西。


配置VS2015

1.      新建win32控制台项目。

追踪算法KCF体验_第7张图片

追踪算法KCF体验_第8张图片


2.      新建cpp源文件。

3.      配置包含目录

我的是D:\opencv\opencv310\sources\newBulid\install\include

D:\opencv\opencv310\sources\newBulid\install\include\opencv

D:\opencv\opencv310\sources\newBulid\install\include\opencv2

如下图:

追踪算法KCF体验_第9张图片


4.      配置库目录

我的是D:\opencv\opencv310\sources\newBulid\install\x86\vc14\lib

D:\opencv\opencv310\sources\newBulid\install\x86\vc14\staticlib

如下图:

追踪算法KCF体验_第10张图片


5.      配置依赖项。

由于生成的依赖项太多,要是把每个lib一个一个写上去,很麻烦,有一种简便的方法,即,路径+*.lib,比如我的即为:

D:\opencv\opencv310\sources\newBulid\install\x86\vc14\lib\*.lib

D:\opencv\opencv310\sources\newBulid\install\x86\vc14\staticlib\*.lib

如下图

追踪算法KCF体验_第11张图片


6.      以上是win32(x86)Debug配置方法,其他模式(x64、Release)配置方法类似。


测试KCF跟踪算法

在上面的工程中添加cpp源文件,并输入如下代码:

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main() {
	// declares all required variables
	//! [vars]
	Rect2d roi;
	Mat frame;
	//! [vars]

	// create a tracker object
	Ptr tracker = Tracker::create("KCF");
	//! [create]

	// set input video
	//! [setvideo]
	std::string video = "E:\\demo1.avi";
	VideoCapture cap(video);
	//! [setvideo]

	// get bounding box
	//! [getframe]
	cap >> frame;
	//! [getframe]
	//! [selectroi]选择目标roi以GUI的形式
	roi = selectROI("tracker", frame);
	//! [selectroi]

	//quit if ROI was not selected
	if (roi.width == 0 || roi.height == 0)
		return 0;

	// initialize the tracker
	//! [init]
	tracker->init(frame, roi);
	//! [init]

	// perform the tracking process
	printf("Start the tracking process\n");
	for (;; ) {
		// get frame from the video
		cap >> frame;

		// stop the program if no more images
		if (frame.rows == 0 || frame.cols == 0)
			break;

		// update the tracking result
		//! [update]
		tracker->update(frame, roi);
		//! [update]

		//! [visualization]
		// draw the tracked object
		rectangle(frame, roi, Scalar(255, 0, 0), 2, 1);

		// show image with the tracked object
		imshow("tracker", frame);
		//! [visualization]
		//quit on ESC button
		if (waitKey(1) == 27)
			break;
	}

	return 0;
}

注意:修改std::string video ="E:\\demo1.avi";这条语句中的视频路径即可。

    运行之后,首先框出物体,然后按下空格或者回车,系统便开始跟踪

最后效果如下图:

追踪算法KCF体验_第12张图片

追踪算法KCF体验_第13张图片

追踪算法KCF体验_第14张图片





注:编译opencv比较麻烦,建议使用这个版本的KCF:https://github.com/hjl240/KCF-Tracking



你可能感兴趣的:(追踪,环境配置)