Opencv3+Opencv_contrib编译

小白一个,自己摸索的编译过程,供其他小白参考。

需要额外下载的文件已打包提供:(上传不了大于110M的文件,提供百度云链接)

链接:http://pan.baidu.com/s/1gfjGfOv 密码:kl0a

编译好的库文件,可直接配置使用:

http://download.****.net/download/jewellwjxx/10105631


本人电脑配置:

Windows 7(64位)+ VS2013 +Opencv3.3.1 + Opencv_contrib3.3.1 + Cmake

1.

在Windows中,使用Git Bash将Opencv和Opencv_contrib的源码Clone到本地,源码链接如下:

https://github.com/opencv/

2.

安装Cmake,Cmake链接如下:

https://cmake.org/files/v3.10/cmake-3.10.0-rc4-win64-x64.msi

安装时,记得选中“将Cmake添加到系统路径”,如下图:

Opencv3+Opencv_contrib编译

3.

头几步配置过程网上有很多,可以直接查看相关网页,下面主要说明配置时由于网络下载遇到的问题。

首先,我自己的存放源码的文件夹名字是source,存放编译后文件的文件夹名字为build,如下:

Opencv3+Opencv_contrib编译

source中存放的opencv的源码和opencv_contrib的源码文件夹。

(1)配置时,下载opencv_ffmpeg.dll,此时出现下图:

Opencv3+Opencv_contrib编译Opencv3+Opencv_contrib编译

出现这种情况时,建议手动下载该.dll文件。

首先打开(你自己放Opencv源码的文件夹路径)\3rdparty\ffmpeg下的ffmpeg.cmake文件,查看所需要下载的文件名称与下载后放置的目录,如下图:

Opencv3+Opencv_contrib编译Opencv3+Opencv_contrib编译

可知,需要下载opencv_ffmpeg.dll、opencv_ffmpeg_64.dll、ffmpeg_version.cmake三个文件,下载链接:

https://github.com/opencv/opencv_3rdparty/branches/all

ffmpeg.cmake文件中显示需要下载的文件为ffmpeg/master_20171009版:

Opencv3+Opencv_contrib编译Opencv3+Opencv_contrib编译

下载opencv_ffmpeg.dll、opencv_ffmpeg_64.dll、ffmpeg_version.cmake三个文件,即红框的三个:

Opencv3+Opencv_contrib编译

下载后应该将文件放到${OpenCV_BINARY_DIR}/3rdparty/ffmpeg中,即我们这儿的(你自己放置编译好的文件的文件夹路径)build\3rdparty\ffmpeg,如果没有ffmpeg,自己手动创建即可。接着修改ffmpeg.cmake,修改前可以先备份一下。修改如下:

Opencv3+Opencv_contrib编译Opencv3+Opencv_contrib编译

即将下载三个文件的语句删掉。此时可关掉Cmake软件,删除build文件夹(这是我自己放置编译好的文件的文件夹)下除了3rdparty文件夹的其他东西。

重新打开Cmake,点击Configure进行配置。

(2)

按(1)配置后遇到如下问题:

Opencv3+Opencv_contrib编译Opencv3+Opencv_contrib编译

说在提取一个.zip文件时出错,我们按照错误提示的路径查看。

D:/opencv3/source/opencv3.3.1/.cache/ippicv/(这是我自己的路径)

Opencv3+Opencv_contrib编译

有这么一个文件,在(你自己的路径)\source\opencv3.3.1\3rdparty\ippicv的ippocv.cmake文件中可知。

Opencv3+Opencv_contrib编译

该文件解压后的东西是要放在${OpenCV_BINARY_DIR}/3rdparty/ippicv中的,即(这是我自己的路径)

Opencv3+Opencv_contrib编译

但是这个压缩包解压时会出现问题。解压这个.lib文件时会出错:

Opencv3+Opencv_contrib编译

所以我们先手动下载另一个版本ippicv_2017u2_win_intel64_20170418.zip的压缩包,解压后进行了替换。

链接为:

https://github.com/opencv/opencv_3rdparty/blob/ippicv/master_20170418/ippicv/ippicv_2017u2_win_intel64_20170418.zip

将ippicv_2017u2_win_intel64_20170418.zip文件夹中ippicv_win文件夹和ippiw_win文件夹按Cmake文件中描述的拷贝至${OpenCV_BINARY_DIR}/3rdparty/ippicv即,如下:

Opencv3+Opencv_contrib编译

再修改ippicv.cmake文件,修改前需要备份,将下载压缩包的语句删除掉:(红框部分)

Opencv3+Opencv_contrib编译

再按(1)中的步骤,删除 除了3rdparty文件夹的其他东西。重新打开Cmake,点击Configure进行配置。

(3)重新配置后提示配置完成,如下图:

Opencv3+Opencv_contrib编译

在上面的红色部分找到OPENCV_EXTRA_MODULES_PATH,将其设定为之前opencv_contrib的modules文件夹路径。如下:

Opencv3+Opencv_contrib编译

再次点击configure进行配置,此时显示。Opencv3+Opencv_contrib编译

说明在下载tiny-dnn包。相关的cmake文件在

(你自己存放源码的文件夹路径)\source\opencv_contrib-master\modules\dnn_modern的CmakeList.txt中

Opencv3+Opencv_contrib编译

下载时,文件缓存在(你自己存放源码的文件夹路径)\source\opencv3.3.1\.cache\tiny_dnn目录下,文件差不多有12M,网络情况不好时会下载超时,如下图。


Opencv3+Opencv_contrib编译

我网比较好,下载N次后成功了。可将我提供的下载好的包拷贝至相关目录并解压:

(我的是)D:\opencv3\source\opencv3.3.1\.cache\tiny_dnn

Opencv3+Opencv_contrib编译

然后修改CmakeList.txt文件,修改前备份。修改如下:

Opencv3+Opencv_contrib编译

即删掉下载文件对应语句,再按之前说的,重启Cmake后配置。最后显示配置完成:

Opencv3+Opencv_contrib编译

最后点击Generate生成工程。


PS:如果编译时遇到如下问题:

Opencv3+Opencv_contrib编译

无法解析的外部符号 _DllMainCRTStartup

找到对应工程opencv_surface_matching。在其工程属性—链接器—高级中,将无入口点改为是(/NOENTRY),保存后重新编译整个项目或单独编译该工程。

对于Release同样设置后进行编译。