一.准备工具
1.分别下载opencv3.2,opencv-contrib,cmake。(博主用的cmake是3.11.1。)
2.解压opencv_contrib-3.2.0.zip 将解压出来的结果放在 opencv/sources/下
build和sources是安装opencv自动产生的文件夹,cmake_build下面会介绍,用于产生cmake出来的结果
将opencv_contrib-3.2.0文件夹放在opencv/sources下。这里多说一句,为什么要放在这个文件夹下面,起始就是因为cmake要编译的文件源码就是在sources下,将contrib放在这里可以自动的进行编译。
3.创建一个名为cmake_build的文件,用来放置cmake输出的工程。
二.CMAKE编译过程
选择好1和2的路径,点击3configure,根据自己的平台选择合适的环境
Notice:此处Configure中需要联网下载ippicv与ffmepg。若没有出现Configure done,请再次尝试点击Configure。
配置完成后找到OPENCV_EXTRA_MODULES_PATH这一项,把自己对应的目录填进去,本人是:
D:/software/opencv320/sources/opencv_contrib-3.2.0/modules,( 注意这里是/ 左斜杠)然后点击configure ,成功之后点击generate:
如果一切顺利,会提示configure done 和 generating done。cmake过程结束
三.在vs2015上的设置与再生成
上述步骤成功后,回到我们设置的存放build文件的目录,D:\software\opencv320\cmake_build,找到如下文件打开:
3.1.打开工程--->右键--->重新生成解决方案。注意你选择的是debug还是release,这就是debug版与release版的区别。bebug版有检测数据是否溢出的功能,release相对反应速度快。
3.2.重新生成,生成的效果如下,如果有失败,原因是GITHUB上的opencv_contrib版本高,所以请更新你的opencv。
Dubug版本下,
3.3 生成INSTALL
此时,编译过程完毕,输出:
dll文件存放目录:D:\software\opencv320\cmake_build\bin\Debug
lib文件存放目录:D:\software\opencv320\cmake_build\lib\Debug
注意这两个路径,一会需要用到这里的dll和lib
四.配置环境变量
dll文件存放目录加入环境变量 D:\software\opencv320\cmake_build\bin\Debug
五.工程配置
1 VC++目录 -- 包含目录 --
D:\software\opencv320\build\include\opencv2
D:\software\opencv320\build\include\opencv
D:\software\opencv320\build\include
D:\software\opencv320\cmake_build\install\include
2 VC++目录 -- 包含库 --
D:\software\opencv320\build\x64\vc14\lib
D:\software\opencv320\cmake_build\install\x64\vc14\lib
3 链接器 -- 输入 -- 附加依赖项
opencv_world320d.lib
opencv_aruco320d.lib
opencv_bgsegm320d.lib
opencv_bioinspired320d.lib
opencv_calib3d320d.lib
opencv_aruco320d.lib
opencv_bgsegm320d.lib
opencv_bioinspired320d.lib
opencv_calib3d320d.lib
opencv_ccalib320d.lib
opencv_core320d.lib
opencv_datasets320d.lib
opencv_dnn320d.lib
opencv_dpm320d.lib
opencv_face320d.lib
opencv_features2d320d.lib
opencv_flann320d.lib
opencv_fuzzy320d.lib
opencv_highgui320d.lib
opencv_imgcodecs320d.lib
opencv_imgproc320d.lib
opencv_line_descriptor320d.lib
opencv_ml320d.lib
opencv_objdetect320d.lib
opencv_optflow320d.lib
opencv_photo320d.lib
opencv_plot320d.lib
opencv_reg320d.lib
opencv_rgbd320d.lib
opencv_saliency320d.lib
opencv_shape320d.lib
opencv_stereo320d.lib
opencv_stitching320d.lib
opencv_structured_light320d.lib
opencv_superres320d.lib
opencv_surface_matching320d.lib
opencv_text320d.lib
opencv_tracking320d.lib
opencv_video320d.lib
opencv_videoio320d.lib
opencv_videostab320d.lib
opencv_xfeatures2d320d.lib
opencv_ximgproc320d.lib
opencv_xobjdetect320d.lib
opencv_xphoto320d.lib
六.KCF测试
#include <opencv2/core/utility.hpp>
#include <opencv2/tracking/tracking.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv.hpp>
#include <iostream>
#include <cstring>
#include <Windows.h >
#pragma comment( lib,"winmm.lib" )
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
// declares all required variables
Rect2d roi;
Mat frame;
// create a tracker object
Ptr<Tracker> tracker = Tracker::create("KCF");
// set input video
// std::string video = argv[1];
VideoCapture cap("E:\\xxx.avi");
// get bounding box
cap >> frame;
roi = selectROI("tracker", frame);
//quit if ROI was not selected
if (roi.width == 0 || roi.height == 0)
return 0;
// initialize the tracker
tracker->init(frame, roi);
// perform the tracking process
printf("Start the tracking process, press ESC to quit.\n");
DWORD t1, t2;
for (;; )
{
// get frame from the video
cap >> frame;
// stop the program if no more images
if (frame.rows == 0 || frame.cols == 0)
break;
t1 = timeGetTime();
// update the tracking result
tracker->update(frame, roi);
t2 = timeGetTime();
printf("time is %u ms\n", (t2 - t1));
// draw the tracked object
rectangle(frame, roi, Scalar(255, 0, 0), 2, 1);
// show image with the tracked object
imshow("tracker", frame);
//quit on ESC button
if (waitKey(1) == 27)break;
}
return 0;
}
参考
https://blog.csdn.net/cosmispower/article/details/60601151
https://blog.csdn.net/childbor/article/details/82984853
https://blog.csdn.net/weixin_43434305/article/details/86740503