在学习图像识别中的特征点检测和匹配时,需要用到一些常用的算法如FREAK、Surf和Sift算法等,但从OpenCV3以后,这些常用的算法在OpenCV的Release或Debug版本中并不存在,因为他们是存放在opencv_contrib目录下面的未稳定功能模块,所以如果我们想要使用这些功能,需要自己下载缺失的的那部分源码并且重新进行OpenCV的编译编译。
一、准备工作
1 . 系统:Win7 64位
2 . opencv3.0:opencv-3.0.0下载地址,提取码:70wz
3 . opencv_contrib:opencv_contrib3.0下载地址 ,提取码:ewtx
4 . CMake-gui工具:CMake下载地址,下载完成后,直接解压即可使用,不必安装。
5 . VS2012:VS2012下载地址,提取码:z36p
注意:需要根据自己的OpenCV版本,下载对应的contrib源码。本文针对的是OpenCV3.0,因此,我给的也是3.0版本的contrib源码。 因为官网(opencv_contrib的github地址)的访问不太稳定,如果大家是其他版本的OpenCV,可以到这里下载对应的contrib源码版本
二、Cmake编译
第一步静态编译(编译opencv官方库)
1、打开cmake-gui\bin目录下的cmake-gui.exe工具:
2、填写相应参数:包括OpenCV源码目录(OpenCV安装路径下的Sources)和OpenCV.sln工程的导出目录(想要输出的文件夹,随意就好,不要有中文),开始导出OpenCV.sln工程
第一次导出时需要设置后面用来编译此OpenCV.sln工程的VS的版本,这里我用的是VS 2012:
3、设置完成之后点击“Configure”,出现Configure Done代表编译成功(如果没出现或者背景是红色的,看看是不是下面我遇到过的错误可能会有帮助)
再点击 “Generate”,最终出现Configure Done,Generate Done代表第一次编译成功
第二步静态编译(编译我们需要的contrib库)
第一次编译完成之后,我们需要将额外的opencv_contrib加到工程中进行第二次编译,在配置表中找到“OPENCV_EXTRA_MODULES_PATH”,设置其参数值为open_contrib源码包中的modles目录,我的目录是“D:/software for work/OPENCV/opencv/opencv_contrib-3.0.0/modules”:
注意:直接复制可能会是"D:\ software for work\ OPENCV\ opencv\ opencv_contrib-3.0.0\ modules",需要将 \ 改成 /
设置完成之后再分别点击“Configure” “Generate”开始生成工程(和第一步一样)
编译完成后,我们查看文件输出目录,发现目录下多出了很多文件,其实就是OpenCV.sln工程文件:
三、用VS打开OpenCV.sln工程,编译生成Debug和Release库
1、用VS 2012打开上面的OpenCV.sln工程,在解决方案中可以查看工程目录:
2、若编译生成debug版本的库,记得在此之前要选择编译的平台信息,这就是编译生成debug版本和release版本的区别:
右键“解决方案‘OpenCV’”,选择重新生成解决方案:
3、找到CMakeTargets中的INSTALL,然后右键选择“仅限于项目”–>“仅生成INSTALL”
然后,在工程目录下的install目录中,可以看到生成了一堆文件
四、把新的库文件配置到到项目中
VC++目录–>包含目录,添加:
D:\software for work\OPENCV\opencv\opencv_contrib\install\include
VC++目录–>库目录,添加:
D:\software for work\OPENCV\opencv\opencv_contrib\install\x86\vc11\lib
D:\software for work\OPENCV\opencv\opencv_contrib\install\x86\vc11\staticlib
链接器–>输入–>附加依赖项,添加: (下面添加的Debug的版本,注意添加的库与编译选项要一致)
opencv_bgsegm300d.lib
opencv_bioinspired300d.lib
opencv_calib3d300d.lib
opencv_ccalib300d.lib
opencv_core300d.lib
opencv_datasets300d.lib
opencv_face300d.lib
opencv_features2d300d.lib
opencv_flann300d.lib
opencv_hal300d.lib
opencv_highgui300d.lib
opencv_imgcodecs300d.lib
opencv_imgproc300d.lib
opencv_latentsvm300d.lib
opencv_ml300d.lib
opencv_objdetect300d.lib
opencv_optflow300d.lib
opencv_photo300d.lib
opencv_reg300d.lib
opencv_rgbd300d.lib
opencv_shape300d.lib
opencv_superres300d.lib
opencv_surface_matching300d.lib
opencv_text300d.lib
opencv_tracking300d.lib
opencv_ts300d.lib
opencv_video300d.lib
opencv_videoio300d.lib
opencv_videostab300d.lib
opencv_ximgproc300d.lib
opencv_xobjdetect300d.lib
opencv_xphoto300d.lib
错误&解决:
错误1:
1、弹出对话框Error in configuration process,project files may be invalid
CMake Error at 3rdparty/ippicv/downloader.cmake:97 (message): ICV: Failed to unpack ICV package from D:/Program Files/opencv/sources/3rdparty/ippicv/downloads/windows-b59f865d1ba16e8c84124e19d78eec57/ippicv_windows_20141027.zip to D:/Program Files/opencv/sources/3rdparty/ippicv/unpack with error 1 Call Stack (most recent call first): 3rdparty/ippicv/downloader.cmake:108 (_icv_downloader) cmake/OpenCVFindIPP.cmake:212 (include) cmake/OpenCVFindLibsPerf.cmake:12 (include) CMakeLists.txt:454 (include) Configuring incomplete, errors occurred!
解决1:https://blog.csdn.net/sunshine_in_moon/article/details/46651039
注:如果下载的压缩包和自己OpenCV目录下的压缩包重名了,就将下载的压缩包改个名字在放进目录下就可以了。
错误2:
2、CMake编译之后,虽然结果出现“Configure Done” “Generate Done”,结果出现红色背景
解决2:一直重复点configure,直到红色背景变成白色,如下图:
注:我的电脑是护眼模式,所以看到的是绿色
参考文档:
地址一:opencv+opencv_contrib编译之惨痛教训