背景

最近项目需要运用到目标跟踪,opencv-contrib里面有一些内置的函数(比如kcf等),想试试看其效果如何,所以就需要重新编译opencv。之前用的opencv3.4.7,所以也重新编译opencv3.4.7+opencv-contrib3.4.7。

准备工作

1.安装vs2015(网上很多教程)
2.下载opencv3.4.7和opencv-contrib3.4.7源码(版本需一致)
opencv下载地址opencv-contrib下载地址 3.安装cmake

开始编译

1.将下载的3.4.7.zip和3.4.7-contrib.zip放进一个文件夹opencv3.4.7里面,解压出现opencv-3.4.7以及opencv_contrib-3.4.7两个文件夹,同时新建文件夹opencv347build

OpenResty 编译参数_OpenResty 编译参数


2.打开cmake,右上角Browse Source以及Browse Source分别加上自己的opencv-3.4.7以及opencv347build

路径,我的是:

OpenResty 编译参数_3.4.7_02


接下来点击configure,过了几分钟会爆红,主要就是一些文件下载不了,我这边遇到的主要就是ffmpeg,ippicv相关的名字的文件。不同opencv需求版本不同,但具体下载以及替换方式可以参考


接下来将cmake选项OPENCV_EXTRA_MODULES_PATH添加为相应opencv_contrib-3.4.7/modules文件夹

OpenResty 编译参数_opencv-contrib_03


(有的博主将BUILD_opencv_world也选上了,目的是为了最后能得到单一的opencv347.lib文件,就好比opencv2与opencv3的区别,确实方便,可我试了最后在vs2015编译opencv时失败了,所以我就没有勾选上,最后在vs2015附加依赖库时辛苦一下。。。)

OpenResty 编译参数_3.4.7_04


添加opencv-contrib相关文件后,重新configure一下,这时就会提示跟之前累似的问题,缺少以下文件等等

OpenResty 编译参数_ide_05

OpenResty 编译参数_ide_06

OpenResty 编译参数_ide_07


反正参考上面那篇博客就行,过程有点枯燥。。

(最后我会把我的.cache文件夹共享出来,所有缺失文件都在里面,方便各位,但仅仅支持3.4.7。貌似不同版本主要是ffmpeg,ippicv不同,contrib缺失的文件好像能通用)3.最后Configure没报错就Generate,(我在configure中一直有python相关的问题爆红,最后无视它generate)

点击右边的Open Project就会进入VS2015的OpenCV.sln项目(或者点击opencv347build文件夹里的OpenCV.sln进入)。

换成Realse x64(Debug x64反正同理,我暂时没编译),先生成->重新生成解决方案,经过大约半小时编译完成(我开始在cmake时选择了BUILD_opencv_world,结果一直报错没找到world347文件,后来就放弃了),然后选择 CMakeTargets下的INSTALL右键选择仅用于项目->仅生成INSTALL,这时就会在D:\Softwares\opencv3.4.7\opencv347build里面找到install文件夹(大功告成)

OpenResty 编译参数_opencv-contrib_08


4.install文件夹里面的东西就跟exe方式安装opencv的build文件夹类似(懂的自然懂),因为我之前使用exe方式安装过opencv3.4.7。所以环境变量,包含目录,库目录,附加依赖项都已经配好,不懂的童鞋上网查查就知道。将D:\Softwares\opencv3.4.7\opencv347build\install里的include文件夹以及x64文件夹里面的文件全部复制到很久之前exe安装的同名文件夹D:\opencv3.4.7\build里面。

OpenResty 编译参数_opencv-contrib_09


OpenResty 编译参数_opencv_10


这样文件复制工作准备完毕,但是因为我生成了许多lib文件,所以需要在附加库目录里面全部加进去,大家如果跟我一样,复制就行。

opencv_aruco347.lib

opencv_bgsegm347.lib

opencv_bioinspired347.lib

opencv_calib3d347.lib

opencv_ccalib347.lib

opencv_core347.lib

opencv_datasets347.lib

opencv_dnn_objdetect347.lib

opencv_dnn347.lib

opencv_dpm347.lib

opencv_face347.lib

opencv_features2d347.lib

opencv_flann347.lib

opencv_fuzzy347.lib

opencv_hdf347.lib

opencv_hfs347.lib

opencv_highgui347.lib

opencv_img_hash347.lib

opencv_imgcodecs347.lib

opencv_imgproc347.lib

opencv_line_descriptor347.lib

opencv_ml347.lib

opencv_objdetect347.lib

opencv_optflow347.lib

opencv_phase_unwrapping347.lib

opencv_photo347.lib

opencv_plot347.lib

opencv_reg347.lib

opencv_rgbd347.lib

opencv_saliency347.lib

opencv_shape347.lib

opencv_stereo347.lib

opencv_stitching347.lib

opencv_structured_light347.lib

opencv_superres347.lib

opencv_surface_matching347.lib

opencv_text347.lib

opencv_tracking347.lib

opencv_video347.lib

opencv_videoio347.lib

opencv_videostab347.lib

opencv_xfeatures2d347.lib

opencv_ximgproc347.lib

opencv_xobjdetect347.lib

opencv_xphoto347.lib最后就能成功使用#include <opencv2/tracking.hpp>了,嘿嘿。

OpenResty 编译参数_ide_11

最后的最后附上.cache文件夹下载,3.4.7版本各位应该直接复制过去就能用