目录
OpenCV对于Qt C++的支持有两种编译方式MinGW和MSVC。
MSVC方式较简单,而MinGW方式需要通过CMake对OpenCV源码进行编译,下面介绍MinGW编译器配置方式。
MSVC编译方式见我的另一篇博客:
1.准备工具
1.1 Qt:5.14.2 64位
1.2 CMake:3.25.1
官网链接:https://cmake.org/
PS:注意勾选添加环境路径后,系统自动将其路径添加至系统环境变量Path中 。
1.3 OpencCV:4.4.0
官网链接:https://opencv.org/releases/
PS: 使用迅雷下载会快很多!
step1.下载完成后得到如下exe文件,实际是一个压缩文件,点击运行,解压至自定义路径,如下:
解压缩后的文件如下:
step2.新建一个opencv_newbuild文件,用于存放后续Opencv编译输出文件,如下:
2.配置环境变量
2.1 配置Qt中minGW的环境变量
D:\QT\Tools\mingw730_64\bin
2.2配置CMake的环境变量
安装CMake过程中选择自动添加,or手动添加。
3. CMake编译OpenCV
step1.打开CMake,选择源目录、输出目录,点击configure.
step2.选择你的编译器类型-“MinGW Makefile”,同时选择“Specify native compilers".
step3.设置C、C++编译器:选择Qt中"gcc.exe"和”g++.exe"路径。
step4. 解决:由于网络下载失败问题
打开CMakeDownloadLog.txt文件,如下
用浏览器打开上述网址,可以使用迅雷/VPN下载上面的2个文件,然后将下载好的文件放在对应文件夹下。
step5.检查Qt5、Qt5Core、Qt5Gui等目录是否正确
( 可能我在此之前配置过Python的Opencv,导致我这里的Qt5的目录如下:)
修改为:
step5. Add Entry
Set QT_MAKE_EXECUTABLE to D:\Qt\5.14.2\mingw73_64\bin\qmake.exe Set OPENCV_VS_VERSIONINFO_SKIP=1
step6.勾选 "WITH_OPENGL", "WITH_OPENMP", "WITH_QT",”BUILD_opencv_world";
取消勾选“WITH_OPENCL_D3D11_VNV","OPENCV_ENABLE_ALLOCATOR_STARTS"
将CMAKE_VBUILD_TYPE"修改为release
点击configure-generate.
step7.查看CPU的核心数与线程数:打开Dos窗口,输入"wmic","cpu get *",
右滑,可找到cpu的核心数(4),线程数(8)
step8.编译,Dos窗口输入
- mingw32 -make -j 8(这里的“8”是cpu线程数)
等待,有错误的话,就去查一查,修改一下CMake里面的设置。(后文有给出我遇到的一个问题及解决方案,并在上述步骤中完成修改了)
- mingw32-make install
(这一步很快)
4.将编译完成后的Opencv的bin目录加入环境变量
5.OpenCV编译出现的错误及解决
Error:
D:/QT/Tools/mingw730_64/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: i386 architecture of input file `CMakeFiles\opencv_world.dir/objects.a(vs_version.rc.obj)' is incompatible with i386:x86-64 output
collect2.exe: error: ld returned 1 exit status
mingw32-make[2]: *** [modules\world\CMakeFiles\opencv_world.dir\build.make:8976: bin/libopencv_world440.dll] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:2237: modules/world/CMakeFiles/opencv_world.dir/all] Error 2
mingw32-make: *** [Makefile:165: all] Error 2
解决方案:
cmake界面按钮: add Entry --->>> BOOL --->>> OPENCV_VS_VERSIONINFO_SKIP 打钩
6. Qt代码测试
新建Qt项目,导入编译好的OpenCV库文件,实现OpenCV读取图像与显示。
step1.新建Qt Widgets Application项目(PS:选择minGW64编译器)
step2.添加库-外部库-设置库文件和包含路径
OpenCV库添加成功后,pro文件中出现以下代码
step3. 添加头文件,读取图片显示图片
参考:
How to setup Qt and openCV on Windows - Qt Wikihttps://wiki.qt.io/How_to_setup_Qt_and_openCV_on_WindowsQt配置opencv环境 | 木风可可 (sorrowfeng.top)https://www.sorrowfeng.top/qt-with-opencv/OpenCV4 + Qt5 开发环境配置合集(C++/Python)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Za4y1v7ra/?spm_id_from=333.337.search-card.all.click&vd_source=a2b7029e58d3c675b2d4ea72e64ea4f5
注意注意:
你出现下面的问题了吗?我找了好久问题,最后还是在求助了老师才解决了问题。
cannot find -llibopencv_world440.dlld
那是因为上面的步骤只生成release模式的opencv文件,没有debug模式下的!但是我们通过Qt添加外部库的方式添加Opencv的库和路径是有debug模式的;如下图,后缀“.dlld” 就表示debug模式的文件,我们没有啊,所以就报错啦。
所以我们需要在release模式下运行,这样就不会报错啦,后面再找找怎么编译debug的opencv文件。