VS2015+opencv3.4.10+opencv-contribute3.4.10
关于opencv-contribute的环境配置
由于目前在做三维重建的实验任务,需要用到OpenCV的扩展库中的特征选择的部分算法(ORB、SURF等),在配置OpenCV-contribute的过程中,遇到不少坑,特此记录。
准备工作
- 已经配置好Opencv(3.4.10)环境(环境配置可参考OpenCV-contribute) github上OpenCV地址
- 从github上下载了Opencv_contribute安装包(版本与OpenCV对应)github上OpenCV-contribute地址
- 安装好cmake(官网下载最新版即可)Cmake官网地址
- 安装好Visual Studio 2015
- 解压opencv-contribute压缩包至opencv的sources文件夹下
- 在opencv文件夹下创建一个newbuild文件夹
生成OpenCV项目
- 打开Cmake的GUI,然后按照图示的选择Opencv存放的目录
- 点击configure调试,选择编译环境(例如我这里是VS2015,想要编译64位)
- configure完毕之后,寻找OPENCV_EXTRA_MODULES_PATH,将opencv额外包的路径设置为下载的opencv-contribute的modules文件夹,再次点击configure调试。
-
这次configure过程中可能出现编译文件ffmpeg_version.cmake、opencv_ffmpeg.dll、opencv_ffmpeg_64.dll、ippicv等文件缺失的情况。出现这种情况,打开D:\opencv\sources.cache对应的文件夹,会发现所有文件下载失败,大小都是0KB(下图已经是修改过的情况)。
该情况是由于下载这些文件要连接外网所致,这里我们可以手动下载这些文件,并替换掉文件夹中的文件,但要注意我们每个文件的MD5的序列号要对应。例如寻找opencv_ffmpeg.dll的MD5,可以全盘搜索CMakeDownloadLog.txt文件,
可以看到我们的步骤是从红框地址下载对应opencv_ffmpeg.dll并核对它的MD5值,我这边的MD5值为301ae2000e25f800ab8e0065f277ad28。
但是在下载ffmpeg_version.cmake文件时,直接打开网页网址会直接出现文件文本内容,需要右击另存为网页再更改名字,而不能直接复制网页文本,这样会导致MD5还是不相同。 -
对应版本都正确之后,继续点击configure,如果下载的opencv_contribute和opencv的版本不对应,可能会出现duplicate Names存在重复文件的错误,需要下载对应的版本。
-
在Cmake编译时也可以把OPENCV_ENABLE_NONFREE后面的勾打上,因为在新版本的opencv中像是SIFT算子或是SURF算子已经不是免费开源的了,如果不打勾的话在之后的代码运行中,可能会在初始化创建SURF对象时出现内存溢出的问题。
- Configure完成之后,点击Generate,之后再点击Open Project。
编译生成dll和lib
- 先选好需要编译的是Debug还是Release,右键ALL_BUILD,仅生成ALL_BUILD
- 右键INSTALL,仅生成INSTALL
- 最后编译完成的有效目录在install下
VS导入环境
环境配置与opencv配置方法相同,此处给出一般的opencv的环境配置方法
- 添加新项目属性表,并自由命名(我命名为opencvEnvPropertySheett)
- VC++目录
包含目录:
C:\opencv\opencv\build\include
C:\opencv\opencv\build\include\opencv
C:\opencv\opencv\build\include\opencv2
库目录:
C:\opencv\opencv\build\x64\vc14\lib
- 链接器-》输入
附加依赖项:opencv_world3410.lib
Ps:文件夹中有两个文件,其中后缀d代表Debug模式,没有d即Release模式。在debug版本和release版本调试配置的时候注意区分。也就是Debug版本要写opencv_world3410d.lib。(图中是用的opencv320版本)