最近在做OpenCV+QT人脸识别项目,需要用到32位的OpenCV库文件,在网上找了很多资源,大都是基于VS2015或者QT的MinGW的,VS2017的32位(x86)版本 少之又少(也不能说没有),因此打算自己来编译。再编译中也是遇到了很多的坑,下面是编译的具体过程。
一、编译前的准备
- Visual Studio 2017
- OpenCV+OpenCV-Contrib3.4.1源码。(这个文件一个是在Opencv的官网,一个是在GitHub上),下起来比较麻烦,而且这两个一定要下对应版本的,我在下的时候速度特别慢,我把我下载下来的放到百度网盘里面供大家下载,这个网盘里面包含了之后的所有文件,因此我把地址放在最后。
- CMake-Gui(我用的是3.8.2)这个网上都有详细的教程,我贴一篇给大家https://blog.csdn.net/u011231598/article/details/80338941
- Cmake在编译过程中需要下载的几个文件FFmpeg,ippcv,xfeatures2d\boodsdesc、Vgg等文件在编译过程中总是会下载失败,我也将他们放在百度网盘中,这些和contirb一样也是要对应版本。
- 百度网盘下载地址 链接:https://pan.baidu.com/s/1GDFTdqdfx7y_pnuG6B_VTQ
提取码:3e50
二、开始编译
A. 将下载下的opencv源码解压放在同一目录下,打开Cmake,
上面的source file目录中填写opencv3的源码路径(不包含contrib),下面的填写编译生成的路径,然后点击configure,打开配置界面,一般是默认选择,如果要生成x64的库文件,选择编译器的时候选择后面带win64的,配置完成后点击Finish,这时就会开始编译。
B. 编译过程中一般都会报红(也就是出现ERROR),这就是我上面说的那几个,主要是FFmpeg和Ippcv两个,这时候就要使用我们下载好的这两个文件替换掉原来的。在我们点了一次configure之后在opencv的源码文件夹下会生成一个叫 .cache 的文件夹里面是我们在编译中下载的文件,最简便的方法就是将我百度网盘里的 .cache文件夹复制替换掉原来的,然后重新configure即可。
在编译中生成的错误Cmake会放在构建目录下的一个叫做CmakeDownLoadLog.txt的文件中,一些错误的信息都能在里面看到。我分享一位大哥的博客给大家,他对这些错误讲的特别清楚。https://blog.csdn.net/KayChanGEEK/article/details/79919417
C. 重新configure之后,不出意外的会出现configure done的提示信息,而且上面的configure过程中也没有飘红,我们的第一步就完成了,接下来大家可以参考这个博客https://www.cnblogs.com/kekeoutlook/p/11701511.html 我们接下来要编译OpenCV-Contrib就要对CMake进行一些配置,大家可以参考上面的博客,然后结合我的来看,主要就是两方面,如果要编译扩展库,那BUILD_OPENCV_World这个选项不能选中,然后就是添加扩展库contrib的module路径H:\opencv-3.4.1.1\opencv_contrib-3.4.1\modules(这个路劲仅供参考,需要换成你们对应的路径),然后再次configure。
D,再次configure之后不出意外的话又会飘红主要是提示你有一些文件没有下载,如下图
那我们也要把这些文件放到.cache目录下(网上也有人说要放到opencv_contrib-3.4.1\modules\xfeatures2d\src 目录下,我放过去之后没啥用,建议还是两个地方都放吧,既然都发博客了那肯定是做出来了,也许步骤有些不一样),放到 .cache 目录下是要注意,一种那就是直接把我的 .cache 文件夹复制过去,如果自己要做的话,记得要在文件前面加一个对应的MD码,不同版本对应的码值不一样如下图。对了,还有个文件可能下载失败face_landmark_model.dat,我也将它放在了云盘中,编译时要放在.cache\data下面,当然这个文件也要加MD码,完整文件名为7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.DAT
然后再次点击configure,一般情况下就不会飘红了,如果再次飘红可以打开对应的文件将里面的内容(飘红的话应该是被覆盖成0字节了)重新复制一下。然后再次配置,直到出现configure done且没有飘红。然后点击 Generate生成vs工程,之后的过程应该没什么问题。可以参考这篇博客https://www.cnblogs.com/kekeoutlook/p/11701511.html。
三、结束语
本文说是VS2017下的opencv编译,其实更多的是在Cmake编译过程中报错问题的解决以及资源分享,希望能帮助到大家,最后我也将我编译好的一个32位的Debug|win32的库文件以及工程文件放到百度云上,百度云里面也会上传一个README.txt对里面的资源的作用进行描述,希望对大家有帮助。欢迎有问题与QQ:1798151948 交流。