用于 Qt 的 OpenCV 编译 (CMake 方式) 问题解决
本文主要参考 《QT+opencv源码编译》:https://blog.csdn.net/m0_49156395/article/details/135721596
详细步骤请阅读上面文章,本文主要着重强调其中的关键步骤。
一、Configure(CMakeList.txt)和 generate(Makefile) 过程
(11)先进行初次Configure
"Where to build the binaries"选项选择一个新建的文件夹保存编译后的文件和编译过程中产生的中间文件
选择MinGW Makefiles,"Specify native compilers"自定义编译器
编译器选择QT的Tools目录下对应套件下的gcc和g++编译器来编译c和c++程序
然后点击configure
如果出错:CMake was unable to find a build program corresponding to "MinGW Makefiles"
解释:
这个错误表明CMake无法找到用于生成Makefiles的构建程序。在使用CMake生成项目文件时,如果指定了"MinGW Makefiles",CMake需要一个Make工具来构建项目,而这个工具通常是由MinGW提供的。如果CMake找不到这样的工具,它会报出这个错误。
解决方法:
-
确认MinGW是否已经安装,并且其bin目录是否已经添加到系统的PATH环境变量中。
-
如果MinGW已安装但未添加到PATH,将其添加到PATH中。
-
如果未安装MinGW,需要先下载并安装MinGW,确保安装过程中包含了MinGW的Make工具。
-
重新运行CMake,指定"MinGW Makefiles"作为构建系统。
如果以上步骤无法解决问题,可以尝试以下额外步骤:
- 使用CMake GUI时,确保点击了"Configure"按钮来刷新环境变量。
- 重新运行CMake指令,并确保指定了正确的MinGW安装路径。
- 检查CMakeLists.txt文件是否有误,确保没有语法错误。
- 如果使用的是CMake的脚本,确保CMake可以访问到MinGW的路径。
最终解决办法:
配置环境变量,将cmake和QT的mingw32编译器的路径添加到Path环境变量中(注意:QT有两个路径)
(12)第二次Configure
配置相关选项过程(可以在Search框中直接搜名字查找):
- ”CMAKE_BUILD_TYPE“设置编译类型,Debug和Release
- ”WITH_1394“选择框选中(此选项可不选中)
- “WITH_OPENGL”选择框选中
- “WITH_QT”选择框选中
- 另外,设置 OPENCV_EXTRA_MODULES_PATH = path\to\contrib\modules\face
其他的选项保持默认即可,然后再次点击Configure
(13)第三次Configure
Configure完毕后将QT的一些路径进行设置为自己本地安装的QT路径,这是以后编译QT项目时候使用到的文件查找路径,设置完毕后再次Configure。
二、install过程
(16)关闭cmake-gui,打开cmd,切换到opencv的编译路径下,开始使用mingw32进行编译安装,“mingw32-make -j8”,使用Makefile进行编译,“-j 8”表示使用8个线程进行编译,编译速度快一些,编译前可以先查看一下电脑的线程数
(17)编译libopencv_corexxx.dll报错中断退出
解决办法:返回cmake,添加Entry,名字为OPENCV_VS_VERSIONINFO_SKIP,Value选中,将CMAKE_CXX_FLAGS选项的值修改为“-std=c++11”,支持c11,然后再次Configure,Generate,mingw32-make -j8进行编译,成功编译后进行安装
(18)使用mingw32-make install命令进行安装,安装成功后便会在同级目录下生成一个install文件夹,这个文件夹下便是mingw套件编译源码后的文件
三、QT中使用opencv
(1)将opencv的install文件夹下的“\x64\mingw\bin”
,路径添加到环境变量Path
(2)新建QT项目,注意:选择编译套件的时候一定要选择和opencv编译时候用的套件一致(比如编译的时候使用64位的,选择套件的也是64位的)
(3)QT项目在pro文件中使用INCLUDEPATH引入opencv的头文件,LIBS引入opencv的静态文件
INCLUDEPATH += D:\apps\Opencv\opencv\mingw32-build\install\include
LIBS += D:\apps\Opencv\opencv\mingw32-build\lib\libopencv_*.a
(4)引入头文件#include “opencv/opencv.hpp”
(5)使用cv命名空间using namespace cv
;
(6)使用opencv中的函数、数据类型编写项目,如显示图片函数 imshow()
, 摄像头类型videoCapture
......
(7)发布程序,使用windeployqt程序将qt的dll文件复制到程序目录下,然后运行程序,因为缺少opencv的dll文件会报错,程序无法运行,根据报错时提示缺少哪些dll文件,到opencv的install目录下复制到发布的应用程序同级目录下,问题解决。
人脸识别项目附加编译:Seetface 2 的CMake编译过程:
Seetaface2 和 OpenCV 的编译过程很像,可以参考文章:https://blog.csdn.net/weixin_43777852/article/details/118487588
除了有以下几点需要注意的地方:
1. 修改openCV_DIR为build后库的路径,比如我的是 D:\opencv-4.0.1-vc14_vc15\opencv\build\x64\vc15\lib。
2. CMAKE_INSTALL_PREFIX 不像opencv在 build目录下,而是在C盘,因此可能出现Maybe need administrative privileges.
这样的权限错误,在 build目录下新建一个 install 目录,将其设置好。
-
人脸检测模块 FaceDetector 模型下载链接:
MD5 :E88669E5F1301CA56162DE8AEF1FD5D5
百度网盘:https://pan.baidu.com/s/1Dt0M6LXeSe4a0Pjyz5ifkg 提取码:fs8r
Dropbox : https://www.dropbox.com/s/cemt9fl48t5igfh/fd_2_00.dat?dl=0 -
面部特征5点定位模块 FaceLandmarker 模型下载链接:
MD5 :877A44AA6F07CB3064AD2828F50F261A
百度网盘:https://pan.baidu.com/s/1MqofXbmTv8MIxnZTDt3h5A 提取码:7861
Dropbox : https://www.dropbox.com/s/noy8tien1gmw165/pd_2_00_pts5.dat?dl=0 -
面部特征81点定位模块 FaceLandmarker 模型下载链接:
MD5 :F3F812F01121B5A80384AF3C35211BDD
百度网盘:https://pan.baidu.com/s/1CCfTGaSg_JSY3cN-R1Myaw 提取码:p8mc
Dropbox : https://www.dropbox.com/s/v41lmclaxpwow1d/pd_2_00_pts81.dat?dl=0 -
人脸特征提取和比对模块 FaceRecognizer 模型下载链接:
MD5 :2D637AAD8B1B7AE62154A877EC291C99
百度网盘:https://pan.baidu.com/s/1y2vh_BHtYftR24V4xwAVWg 提取码:pim2
Dropbox : https://www.dropbox.com/s/6aslqcokpljha5j/fr_2_10.dat?dl=0
参考资料:
1. 《QT+opencv源码编译》:https://blog.csdn.net/m0_49156395/article/details/135721596
2. Seetface 6的CMake编译过程:https://blog.csdn.net/fy291021851/article/details/124928615