主要参考以下文章
- https://www.cnblogs.com/huangfuyuan/p/9147092.html
- https://blog.csdn.net/wzj0808/article/details/79388446
- https://baijiahao.baidu.com/s?id=1662883232064729369&wfr=spider&for=pc
官方教程
配置过程需要使用cmake,因此需要先下载cmake
qt版本:5.9.6
opencv版本:3.4.9
cmake版本:3.18.5
我一开始下的是opencv4,后来一直提示ffmpeg与opencv版本不一致,所以又下载了opencv3
opencv4配置很顺利,但是opencv3在cmake软件以及mingw32-make中遇到了很多问题
01 下载cmake
下载地址:https://cmake.org/download/
剩下一路next就可以了
02 qt+opencv的配置
- 打开cmake,第一个地方是opencv的sources文件夹的路径,第二个地方是将要生成的配置库地址,可以自己指定。然后点击
configure
- 在弹出框中选择MinGW Makefile,选择Specify native compilers,点击Next,如下图所示
- 点击next,选择gcc.exe和g++.exe所在路径
eg:
C对应E:/Mysoftware/Qt5.12.22/Tools/mingw730_32/bin/gcc.exe
C++对应E:/Mysoftware/Qt5.12.22/Tools/mingw730_32/bin/g++.exe
- 完成后下拉将WITH_OPENGL和WITH_QT选中,然后再次点击Configure
- 这一步可能会报错,也可能不会,只需要吧QT5_DIR的值改为
D:\Applications\qt\qt\5.9.6\mingw53_32\lib\cmake\Qt5
,然后再次configure(图中的位置有错误,需要再到QT5)
- 然后再修改位置,再configure
将红色区域中的Value地址路径改为你的Qt安装路径下对应的Qt5Concurrent、Qt5Core、Qt5Gui、Qt5Test、Qt5Widgets和Qt5,我的文件路径如下所示,路径参考:
E:/Mysoftware/Qt5.12.22/5.12.2/mingw73_32/lib/cmake/Qt5Concurrent
E:/Mysoftware/Qt5.12.22/5.12.2/mingw73_32/lib/cmake/Qt5Core
E:/Mysoftware/Qt5.12.22/5.12.2/mingw73_32/lib/cmake/Qt5Gui
E:/Mysoftware/Qt5.12.22/5.12.2/mingw73_32/lib/cmake/Qt5OpenGL
E:/Mysoftware/Qt5.12.22/5.12.2/mingw73_32/lib/cmake/Qt5Test
E:/Mysoftware/Qt5.12.22/5.12.2/mingw73_32/lib/cmake/Qt5Widgets
E:/Mysoftware/Qt5.12.22/5.12.2/mingw73_32/lib/cmake/Qt5 - 然后就没有红色的了,在下拉框中找到CMAKE_BUILD_TYPE选择Release类型,再次点击Configure
- 若没有报错,点击Generate,Generating done之后,关闭Cmake即可,然后进入之前我们新建的cmakeInstall文件夹中可以看到生成的文件
- 将鼠标放在该文件夹界面内,按住shift键,同时点击鼠标右键,对话框中点击在此处打开Powershell窗口(s),进入Windows Powershell,输入下面指令并回车:
mingw32-make -j 8
(其中j 8代表8线程,和电脑有关,可以更改)。等待一段时间 - 100%完成之后,输入下面指令并回车:
mingw32-make install
,完成后关闭窗口 - 配置环境变量。将新生成的 D:\Applications\opencv\installCmake\bin 添加到path变量
03 测试
- 新建qt工程,在
.pro
文件中加入以下语句
(因为后面opencv重装了,所以路径和签名的不是很对应)
INCLUDEPATH += D:\Applications\opencv3\opencv\build\include
D:\Applications\opencv3\opencv\build\include\opencv
D:\Applications\opencv3\opencv\build\include\opencv2
LIBS += D:\Applications\opencv3\qtBuild\lib\libopencv_*.a
注意 INCLUDEPATH
里是opencv的地址,LIBS
里是通过cmake生成的地址
位置如下:
- 在mainwindow.cpp里加两段
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
Mat image;
image = imread("D:\\study\\spiderman.jpg");
namedWindow( "Display window", WINDOW_AUTOSIZE );
imshow( "Display window", image );
位置如下图
注:路径符号为/
或者\\
,而不是\
运行,当出现图片,则说明配置成功
04 报错
4.1 在cmake中选择gcc和g++位置后生成报错
- 报错:CMake Error: CMake was unable to find a build program corresponding to “MinGW Makefiles”. CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
- 解决:https://stackoverflow.com/questions/45150172/cmake-error-cmake-was-unable-to-find-a-build-program-corresponding-to-mingw-ma
如果在cmd中输入mingw32-make
回车后显示 ‘mingw32-make’ is not recognized as an internal or external command, operable program or batch file
则配置环境变量,系统变量path中加入D:\Applications\qt\qt\Tools\mingw530_32\bin
(这是mingw32-make.exe的路径)
然后关了cmd,再重新打开,然后重新运行mingw32-make
,显示 mingw32-make: *** No targets specified and no makefile found. Stop. ,则说明已经配置好了
4.2 ffmpeg下载有问题
-
参考:
https://blog.csdn.net/star_of_science/article/details/104406819
https://blog.csdn.net/jjookkeerr95/article/details/108399546l -
问题:
看cmake,发现错误写在D:/Applications/opencv/opencvQt/CMakeDownloadLog.txt
里,为了方便用notepad打开
然后可以看到是缺失了文件
缺失文件如下:
#missing “D:/Applications/opencv/opencvQt/3rdparty/ffmpeg/opencv_ffmpeg.dll”
#missing “D:/Applications/opencv/opencvQt/3rdparty/ffmpeg/opencv_ffmpeg_64.dll”
#missing “D:/Applications/opencv/opencvQt/3rdparty/ffmpeg/ffmpeg_version.cmake” -
解决:
下载文件,需要能连外网
下载地址如下图所示:
eg:https://raw.githubusercontent.com/opencv/opencv_3rdparty/fe71c0ad807fdc33c2178e48e488f1e9b177c39a/ffmpeg/opencv_ffmpeg.dll
可以直接通过外网下载好需要的文件,然后
①重命名为"md5-文件名",放在 /.cache/ffmpeg/ 文件夹下面,(eg:D:/Applications/opencv/opencv/sources/.cache)
或者
②直接放到目标路径 /3rdparty/ffmpeg/opencv_ffmpeg.dll(不用重命名),(eg:D:/Applications/opencv/opencvQt/3rdparty/ffmpeg/opencv_ffmpeg.dll) -
注意:
- dll直接下载就可以。cmake不是直接下载,而是直接打开了ffmpeg_version.cmake的网页,可以右键网页选择另存为 ffmpeg_version.cmake.txt,然后再改为ffmpeg_version.cmake。这里如果自己新建一个txt,然后直接将网页上的内容拷进去,然后再该后缀为.cmake是不行的,会提示md5不匹配。
- 不同版本的OpenCV对应的 opencv_ffmpeg.dll 等缺失文件的 md5 签名是不一样的
4.3 mingw32-make报错
如果是多线程报错,可以考虑减少线程数再编译
其他可参考:https://blog.csdn.net/lx0307/article/details/84838422
和 https://blog.csdn.net/wangguang_/article/details/106359310
4.4 MinGW编译OpenCV到vs_version.rc.obj处出错
- 报错
modules\core\CMakeFiles\opencv_core.dir\build.make:402: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/src/directx.cpp.obj' failed
mingw32-make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/directx.cpp.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs....
[ 33%] Built target IlmImf
CMakeFiles\Makefile2:2196: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/all' failed
mingw32-make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
Makefile:180: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
- 解决
https://www.jianshu.com/p/3c4b1af3837f
上面的做了还不太对,所以按下方这个修改
https://blog.csdn.net/bankexinan/article/details/112970346
还是没用,最后解决方法
https://blog.csdn.net/qq_26056015/article/details/93363067
在CMake中关闭WITH_OPENCL_D3D11_NV选项,重新生成
4.5 modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_dshow.cpp.obj’ failed
- 报错
modules\videoio\CMakeFiles\opencv_videoio.dir\build.make:187: recipe for target 'modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_dshow.cpp.obj' failed
mingw32-make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_dshow.cpp.obj] Error 1
CMakeFiles\Makefile2:2867: recipe for target 'modules/videoio/CMakeFiles/opencv_videoio.dir/all' failed
mingw32-make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
Makefile:161: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
- 解决
在opencv的源码文件cap_dshow.cpp中添加
#define STRSAFE_NO_DEPRECATE