如何安装opencv_contrib及解决其安装编译问题

1、背景

最近在实现一个基于opencv3的自动人脸识别项目,主要是使用了cv2.face模块自带的三种人脸识别算法,分别是cv2.face.EigenFaceRecognizer_create()、cv2.face.FisherFaceRecognizer_create()以及cv2.face.LBPHFaceRecognizer_create(),这三个算法一个比一个效果好,但是在运行代码时,出现了如下问题:

AttributeError: module ‘cv2.cv2’ has no attribute ‘face’

网上搜索后,得知是因为cv2.face模块因稳定性和测试不足问题没有在opencv3库上自带,需要自己下载opencv3和opencv_contrib源代码使用CMake和visual studio编译!

2、下载CMake和opencv/opencv_contrib

根据提示,基于自身的环境一步一步的下载相关代码:

环境:win10 x64 + python3.6.2

下载CMake:Download | CMake

(因网络原因后来我到百度上下载了CMake 3.8.0,已放在百度网盘:

链接: https://pan.baidu.com/s/1hseSqEC 密码: s23v)

下载opencv 3.3.0源代码:OpenCV 3.3 – OpenCV library

百度网盘:链接: https://pan.baidu.com/s/1pKTiHv1 密码: kiu4

下载opencv_contrib源代码:opencv/opencv_contrib

百度网盘:链接: https://pan.baidu.com/s/1nuXq3kH 密码: 1381

安装CMake并解压opencv和opencv_contrib source code到同一个文件夹上!

3、使用CMake生成opencv_contrib的python接口

此部分参考:用Cmake生成opencv_contrib的python接口 – u012900686的博客 – CSDN博客

我觉得步骤还是蛮简单的:

3.1、选取opencv source目录和build output目录

如下图:

1是opencv的source code路径,2是CMake output(包括configure和generate)的目录

《如何安装opencv_contrib及解决其安装编译问题》
《如何安装opencv_contrib及解决其安装编译问题》

3.2、第一次点击左下角的Configure

这一步主要是根据opencv source code路径下的CMakeLists.txt生成一些配置选项

如果看到CMake底部log输出窗口输出“Configuring done”则说明第一步成功了。

3.3、配置OPENCV_EXTRA_MODULES_PATH

这一步就是要配置opencv_contrib的路径,以便生成opencv_contrib相关模块的库函数接口

找到OPENCV_EXTRA_MODULES_PATH,然后选择opencv_contrib/modules所在路径

C:\Users\Administrator\Desktop\build\opencv\opencv_contrib-master\modules

《如何安装opencv_contrib及解决其安装编译问题》
《如何安装opencv_contrib及解决其安装编译问题》

3.4、检查是否包含有BUILD_opencv_python3

这一步就是要检查是否包含BUILD_opencv_python3或BUILD_opencv_python2,这与个人系统环境是否包含python3或python2有关,为后来生成opencv_contrib的python接口做准备

对应目录应该是C:\Users\Administrator\Desktop\build\opencv\opencv-3.3.0\modules\python

3.5、第二次点击左下角的Configure

这一步根据之前配置的opencv_contrib path重新生成配置项

3.6、直接点击左下角Generate生成visual studio项目文件

之前Configure时无错误则可直接等待几分钟生成visual studio文件

如果看到“Configure done”和“Generate done”字眼说明成功了。

4、解决CMake报错CXX/C compiler unknown的问题

题主使用CMake时遇到如下问题:

《如何安装opencv_contrib及解决其安装编译问题》

The CXX compiler identification is unknown

The C compiler identification is unknown

从错误log来看就是C/C++编译器找不到了,可是在第一次Configure时都会跳出如下选框选择默认编译器的。

注意:我发现一个规律,如果重新配置CMake的“where to build the binaries” 路径,可以重新选择编译器版本,网上有些说需要重新安装CMake来选择编译器其实是不需要的!

《如何安装opencv_contrib及解决其安装编译问题》
《如何安装opencv_contrib及解决其安装编译问题》

后来,我尝试选了不同的编译器,但是发现都无效,后来想想是不是自己没有安装visual studio啊(前段时间重装了win10系统没有安装任何版本的visual studio),打开控制面板查看已安装的程序,果然没有安装任何版本的visual studio!!!

折腾一番,安装好visual studio后,选择对应的visual studio版本,这次终于可以了!

5、使用visual studio生成带有opencv_contrib接口的opencv库

5.1 visual studio打开OpenCV.sln

CMake Genarate成功后,会在CMake output目录下生成一堆东西,在根目录下,找到OpenCV.sln,然后使用相应的visual studio打开加载该解决方案。

《如何安装opencv_contrib及解决其安装编译问题》
《如何安装opencv_contrib及解决其安装编译问题》

5.2、设定“配置管理器”

这一步主要是设定“解决方案”为“release”而不是“debug”

《如何安装opencv_contrib及解决其安装编译问题》
《如何安装opencv_contrib及解决其安装编译问题》

再visual studio界面:生成–>配置管理器–>“活动解决方案配置”由“debug”改为“release”

5.3、逐个编译CMakeTargets

分别对INSTALL、ALL_BUILD以及BUILD_opencv_python3右键单击”生成“,等待直到编译完成无报错信息,如果有报错信息且是一些不太常用的模块,则可到CMake界面配置项里将相应模块去掉,即将相应的勾去掉不包含进来,如下是将ximgproc去掉,然后再重新来一遍,直到没有任何报错信息!

《如何安装opencv_contrib及解决其安装编译问题》
《如何安装opencv_contrib及解决其安装编译问题》

5.4、拿到cv2.cp36-win_amd64.pyd放到python安装目录下

visual studio编译生成opencv python接口后,会在CMake output路径下的lib\python3\Release生成带有opencv_contrib接口的opencv库文件,如cv2.cp36-win_amd64.pyd,将其放到相应的python安装目录lib/site-packet/cv2下即可使用!

比如ximgproc模块报错,那就到CMake里将BUILD_opencv_ximgproc配置项去掉!

《如何安装opencv_contrib及解决其安装编译问题》
《如何安装opencv_contrib及解决其安装编译问题》

如果在对“INSTALL”生成编译过程中报如下错误:

50>C:\Users\Administrator\Desktop\build\opencv\opencv_contrib-master\modules\xfeatures2d\src\sift.cpp(1156): error C2039: “removeDuplicatedSorted”: 不是“cv::KeyPointsFilter”的成员

50>C:\Users\Administrator\Desktop\build\opencv\opencv-3.3.0\modules\features2d\include\opencv2/features2d.hpp(99): note: 参见“cv::KeyPointsFilter”的声明

50>C:\Users\Administrator\Desktop\build\opencv\opencv_contrib-master\modules\xfeatures2d\src\sift.cpp(1156): error C3861: “removeDuplicatedSorted”: 找不到标识符

则到类KeyPointsFilter查看确实没有“removeDuplicatedSorted”这个接口,但是却有“removeDuplicated”,所以将其修改成正确的接口,如下:

《如何安装opencv_contrib及解决其安装编译问题》
《如何安装opencv_contrib及解决其安装编译问题》

调用cv2函数库时,如果提示“from .cv2 import * ImportError: DLL load failed: 找不到指定的模块”,则需要使用Depends.exe查看dll依赖关系,如果缺少一些dll库,可以安装Visual C++ Redistributable for Visual Studio 2015(Visual C++ Redistributable for Visual Studio 2015)或者版本更高的reditexe试试!

后记:

以上是不是太折腾了,其实PyPI上早已帮我们编译好相应安装包了,执行一条语句即可完成安装:pip install opencv-contrib-python

《如何安装opencv_contrib及解决其安装编译问题》

    原文作者:芯尚刃
    原文地址: https://zhuanlan.zhihu.com/p/29722834
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞