如何将Anaconda Python2与自行编译的OpenCV关联?缺失cv2.face模块
解决Anaconda Python2与自行编译OpenCV关联及cv2.face模块缺失问题
兄弟,我太懂你这种卡在关键模块缺失的焦虑了——人脸识别项目离了cv2.face真的寸步难行。你直接复制cv2.pyd的方式之所以丢了face模块,是因为这个模块属于OpenCV的扩展模块(在opencv_contrib里),而且你编译时没正确关联Anaconda的Python环境,也没开启扩展模块的编译开关。下面给你一步步来解决:
第一步:重新用CMake配置OpenCV(核心关键)
先准备对应版本的opencv_contrib:
你必须下载和你当前编译的OpenCV完全同版本的opencv_contrib源码(比如OpenCV是3.4.10,就下3.4.10的contrib),版本不匹配会直接编译失败。打开CMake,配置基础路径:
- 把
Where is the source code指向你OpenCV的源码根目录 - 把
Where to build the binaries指向一个空的编译输出目录(别和源码混在一起)
- 把
关联Anaconda Python2环境:
点击Configure,选你用的Visual Studio版本和对应平台(x86/x64,必须和你的Anaconda Python2一致,比如Anaconda是64位就选x64)。配置完成后,找到以下Python2相关的变量,手动改成Anaconda的路径:PYTHON2_EXECUTABLE:指向Anaconda安装目录下的python.exe(比如C:\Anaconda2\python.exe)PYTHON2_INCLUDE_DIR:指向Anaconda的include文件夹(C:\Anaconda2\include)PYTHON2_LIBRARY:指向Anaconda的libs文件夹里的python27.lib(C:\Anaconda2\libs\python27.lib)PYTHON2_NUMPY_INCLUDE_DIRS:这个CMake会自动识别,如果没识别到,手动指向C:\Anaconda2\Lib\site-packages\numpy\core\include
开启扩展模块和face模块编译:
- 找到
OPENCV_EXTRA_MODULES_PATH,设置为你下载的opencv_contrib目录下的modules文件夹(比如D:\opencv_contrib-3.4.10\modules) - 找到
BUILD_opencv_face选项,确保它被勾选上(如果没看到,先点一下Configure刷新) - 还要确保
BUILD_opencv_python2是勾选状态,这是编译Python2绑定的关键
- 找到
完成CMake配置:
反复点击Configure,直到所有红色条目都消失,然后点击Generate生成Visual Studio的工程文件。
第二步:用Visual Studio重新编译并安装
- 打开CMake生成的
.sln工程文件,选择Release模式(Debug模式的pyd在Python环境里大概率跑不起来),然后右键点击INSTALL目标,选择Build。 - 编译完成后,CMake会自动把编译好的
cv2.pyd以及face模块的相关文件,复制到你的Anaconda Python2的site-packages目录下,不需要你手动复制了。
第三步:验证模块是否正常
打开Anaconda的Python2终端,输入以下命令:
import cv2 print(dir(cv2.face))
如果能输出一堆face模块的函数(比如createLBPHFaceRecognizer之类的),就说明成功了!
额外注意点
- 如果你之前手动复制过
cv2.pyd到Anaconda的site-packages,一定要先删掉,避免和新编译的文件冲突。 - 编译过程中如果遇到报错,大概率是opencv_contrib版本不对,或者CMake里的路径配置有误,仔细检查一遍变量就行。
- 确保Anaconda的Python2环境是激活状态的(虽然编译时是直接指定路径,但激活环境后验证更准确)。
内容的提问来源于stack exchange,提问作者Martian
相关产品推荐
相关产品推荐

