编译opencv源码,通常是为了使用其未集成的库,例如opencv_contrib,我也不例外。为了使用opencv_contrib中的部分功能,我在Github上下载了opencv和opencv_contrib的源码并成功编译,已验证可用。在此记录编译与配置过程,供后续查阅与参考。
win10专业版 64位操作系统 + VS2013中文版 + opencv3.x(20161003源码) + opencv_contrib(20161003源码)
本次编译主要参考了以下两篇文章,感谢原作者:
OpenCV学习笔记(八)—— OpenCV 3.1.0 + opencv_contrib编译(Windows)
两位作者都对编译过程进行了详细的说明和注解,我这里简要概述一下编译过程,重点说明一些我觉得需要特别注意的地方。
磨刀不误砍柴工,这一步很简单但很重要。
3.1 下载cmake-gui工具:http://www.cmake.org/cmake/resources/software.html。
3.2 下载opencv和opencv_contrib源码
我从Github下载的opencv源码的压缩包大小是77.2M,解压缩后的大小时152M; opencv_contrib源码压缩包大小是53.2M,解压后大小是98.3M。
下载源码时我使用的网络是中国电信10M宽带,我多次尝试后才得以完整下载。“open in DeskTop”和“Download ZIP”两种方式我都试过,也尝试了Firefox和chrome,其中firefox未下载成功过,而chrome下载时,未下载完成也不会提示错误。因此这里强烈建议大家在下载完成后仔细确认压缩包的大小是否与Github上的描述相符。当然,下载的实际状况跟很多因素有关,预祝大家下载顺利。
4.1 文件夹目录
如下图所示,我开始编译之前,源码和编译文件夹目录结构如下:
4.2 cmake-gui
打开cmake-gui,填写opencv源代码路径和源代码输出路径,然后Configure。
注意事项:
4.2.1 首次单击左下角的“configure”时,会弹出编译器选择,根据实际情况选择即可。
4.2.2 “configure”时,可能会出现错误。我遇到了两个:
ffmpeg not downloaded
“ippicv_windows_20151201.zip”not downloaded
这两项内容在CSDN上都有资源可以下载,http://download.csdn.net/detail/sunny_lc/9474246。我暂时用不到ffmpeg,且编译的当时懒惰了一把,直接取消了ffmpeg选项的编译;ippicv未找到取消的选项,所以我手动下载了ippicv然后复制到:D:\opencv3x\opencv\sources\3rdparty\ippicv\downloads\windows-b59f865d1ba16e8c84124e19d78eec57,将已经存在的ippicv_windows_20151201.zip覆盖。
这两项错误解决后,configure done。
/*********20170404更新************/
ffmpeg若不下载,会导致VideoCapture无法打开mp4文件,而VideoCapture和mp4是opencv中比较常用的功能,因此大家在编译的时候坚决不能偷懒。我编译时偷懒了,用的时候还是要重新编译。
另外经过踩坑验证,这里提醒同学们:在sources\3rdparty\ffmpeg\ffmpeg.cmake中有下载网址和指定文件需求的MD5,不同时间段的opencv源码(包含相同版本和不同版本)需要的ffmpeg相关文件的哈希值不一样。因此在网络上找到现成可用的,先打开sources\3rdparty\ffmpeg\ffmpeg.cmake文件确认一下哈希值是否相符,否则configure也不会成功。一般内网无法下载;若有外网可用,则切记关闭360的所有功能,才可成功下载ffmpeg。
/*********20170404更新************/
4.2.3 ”BUILD_EXAMPLES”默认未被勾选,我编译时勾选了此项。
4.2.4 添加opencv_contrib
在cmake-gui界面的搜索栏中找到“OPENCV_EXTRA_MODULES_PATH”并将其赋值为opencv_contrib源码中modules所在路径:D:/opencv3x/opencv/sourcesContrib/modules。注意,路径中一定要用”/”,而不是”\”,我从电脑地址栏拷贝的路径是这样的:D:\opencv3x\opencv\sourcesCotrib\modules,以”\”的路径填写后“configure”时会报错。
4.2.5 再次反复“configure”直到界面不再出现红色背景,之后单击“generate”。不出意外的话,你会看到configure done和generate done。
4.3 打开D:\opencv3x\opencv\build\opencv.sln。有的攻略上说可以直接编译“CMakeTargets”下的“INSTALL”
,但是我直接编译时会报错。我需要先通过下图界面的方式先编译,编译大概需要30分钟左右。
编译完成后,会出现“无法启动程序“XXXX\All_BUILD””的警告,不用紧张,这是正常的。因为OpenCV的源代码工程默认将“ALL_BUILD”这个项目其设为了启动项,编译成功后,就会默认运行它,而它本身并不是exe,不可运行。
按上述步骤编译完成后,然后再点选“解决方案”–>“CMakeTargets”–>“INSTALL”,在单击右键的菜单中选择“生成”。以同样的方法编译Release版本,debug版本和release版本编译完成后要分别编译INSTALL。
5.1 添加环境变量:D:\opencv3x\opencv\build\install\x64\vc12\bin
5.2 新建或找一个现有的opencv项目配置项目属性。
(1)VC++目录–>包含目录,添加:
D:\opencv3x\opencv\build\install\include
D:\opencv3x\opencv\build\install\include\opencv
D:\opencv3x\opencv\build\install\include\opencv2
(2)VC++目录–>库目录,添加:
D:\opencv3x\opencv\build\install\x64\vc12\lib
(3)链接器–>输入–>附加依赖项,若为Debug版本,添加:D:\opencv3x\opencv\build\install\x64\vc12\lib目录下的文件名最后个字母为d的所有lib文件;若为Release版本,这些lib文件名最后没有d,应根据实际情况添加。
我编译得到的Debug版本的lib文件如下:
opencv_aruco310d.lib
opencv_bgsegm310d.lib
opencv_bioinspired310d.lib
opencv_calib3d310d.lib
opencv_ccalib310d.lib
opencv_core310d.lib
opencv_datasets310d.lib
opencv_dnn310d.lib
opencv_dpm310d.lib
opencv_face310d.lib
opencv_features2d310d.lib
opencv_flann310d.lib
opencv_fuzzy310d.lib
opencv_highgui310d.lib
opencv_imgcodecs310d.lib
opencv_imgproc310d.lib
opencv_line_descriptor310d.lib
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_optflow310d.lib
opencv_photo310d.lib
opencv_plot310d.lib
opencv_reg310d.lib
opencv_rgbd310d.lib
opencv_saliency310d.lib
opencv_shape310d.lib
opencv_stereo310d.lib
opencv_stitching310d.lib
opencv_structured_light310d.lib
opencv_superres310d.lib
opencv_surface_matching310d.lib
opencv_text310d.lib
opencv_tracking310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib
opencv_xfeatures2d310d.lib
opencv_ximgproc310d.lib
opencv_xobjdetect310d.lib
opencv_xphoto310d.lib
打开链接器–>输入–>附加依赖项,点击 附加依赖项 右边的下拉框,选择编辑,在弹出的对话框中将所有的lib文件拷贝到图示区域,点击确定即可。