opencv3.1.0+contrib CMake 编译配置全流程
项目要用到contrib库,两个月前配过一次,当时就因为实验室不能联网,每天开热点上https://raw.githubusercontent.com/下载,登不上去总是网络超时所以失败。现在找到了相关解决办法,在下面tips内有提到。这一次终于成功了,也参考了论坛许多大佬的踩坑经验,记录一下,希望对大家有帮助。
配置要素:
win10,Visual Studio 2013 ,OpenCV3.1.0,和对应contrib库
一、opencv + contrib 源码
镜像源
https://www.bzblog.online/opencv/
https://www.bzblog.online/opencv/opencv_contrib/
建议镜像下载,快很多,开热点都能下载下来
- 没有安装opencv的情况
要对应版本下,比如我用的是opencv3.1.0,下载的opencv_contrib也得是这个版本;
因为cmake要用源码,所以没有opencv的可以找zip等压缩文件下载; - 安装过exe版本的也没关系,进入opencv安装目录就有一个sources文件夹,这个就是源码,后续cmake编译的时候,就可以直接填这个目录作为源目录
比如我的目录是这个,E:\opencv\sources
二、CMake 下载安装
官网下载一个适配电脑的较新版本就行,随便挑个顺眼的版本下就好了
直接复制编译好的文件包也可
三、CMake 编译opencv流程
-
解压先前从官网上下载下来的两个压缩包,获得文件夹:opencv310、opencv310_contrib,放置位置自己记得就好了,自己记不得就单独建一个记得住的目录
-
任意位置新建一个文件夹…\build,作为编译目标文件夹
-
打开cmake的gui,源填opencv310\source路径,target填…\build路径
-
第一次点configure,选择需要的vs版本进行编译,我的是Visual Studio 2013
-
cmake过程中configure、清bug,指南见下面的tips,目前主流错误就是ffmpeg的下载网站被墙导致网络超时or根本没联网所以建的空文件哈希码报错,解决完这一步问题,configure第一次完成以后,就可以进入下一步,添加扩展库
-
添加OPENCV_EXTRA_MODULES_PATH的附加项的路径为contrib目录下的modules文件夹
……\opencv-contrib3.1.0\modules -
重新configure,直到configure内容没有红色,目录全白以后就可以generate了
-
generate,成功
-
打开sln,用编译对应的vs版本,opencv310+vs13,我好像编译只能x86,x64报错过多
先生成解决方案,再单独生成INSTALL文件,release和debug模式都编译
-
生成完成后,在build目录下会出现完整的install文件夹,后续环境配置和应用都在…/build/install/…文件夹目录
tips:解决cmake编译过程中configure产生的error:
因为网路问题无法加载opencv_ffmpeg.dll、opencv_ffmpeg_64.dll和ffmpeg_version.cmake和ippicv_windows_20151201.zip
两种办法:
-
根据ffmpeg文件夹下的cmake文件,找到对应的网址提前下载后替换对应文件
这个网址在configure报错里就会直接写出,比如:https://raw.githubusercontent.com/Itseez/opencv_3rdparty/8aeefc4efe3215de89d8c7e114ae6f7a6091b8eb/ffmpeg/ffmpeg_version.cmake
ffmpeg文件下的三个需要下载的文件前面网址目录都一样,只有最后的下载文件名,ffmpeg_version.cmake,这个部分不一样,每次替换掉就好了,从正确网址下面下载的文件hash码就是对的,下载下来以后放在对应的文件夹里就好了,对应的文件路径在configure的报错详细内容里也可以直接找到
如果还是进不去网站,就用加速网站 https://ghproxy.com/ ,再把下载网址复制在网站的搜索框就好了
但是ffmpeg_version.cmake这个文件可能会在网站里直接进去而不是下载文件,这时候可以参考下面方法2,更改配置文件的下载网址 -
在xxx.cmake文件里,把下载网址前添加“https://ghproxy.com/”即如下所示,指引到加速网址下载
加速网站其实就是把下载网址加了这个代理的前缀,所以可以之间找到ffmpeg文件夹下的。cmake文件,把里面的下载网址前面也加上这个前缀 https://ghproxy.com/https://raw.githubusercontent.com/Itseez/opencv_3rdparty/8aeefc4efe3215de89d8c7e114ae6f7a6091b8eb/ffmpeg/…… -
如遇到离线cmake,必须使用1方法进行编译,对应于310版本的这四个文件,有备份(该资源可0积分下载)
四、vs+opencv 工程使用配置
(与exe无扩展库版本opencv配置流程无异,只是要多添加可执行文件目录,库目录多了一项静态库,使用cmake生成的3.0版本以后的子库没有封装,添加附加依赖项的时候要像3.0之前的版本一样把所有子库名字都添进去)
下面配置环境的目录,都是在我们build文件夹下,编译之后生成的install文件里找:
-
添加系统环境变量
……\build\install\x86\vc12\bin
-
可执行文件目录
……\build\install\x86\vc12\bin
-
包含目录
……\build\install\include
……\build\install\include\opencv
……\build\install\include\opencv2
-
库目录
……\build\install\x86\vc12\lib
……\build\install\x86\vc12\staticlib -
添加依赖项
(debug的依赖项,release不想写了,这个是参考一位博主,直接粘贴过来的,想要release的,把所有后缀d去掉就好了,也可以直接用cmd进入lib目录用命令直接把文件名都写入txt,就全有了)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_ts310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib
opencv_xfeatures2d310d.lib
opencv_ximgproc310d.lib
opencv_xobjdetect310d.lib
opencv_xphoto310d.lib