二十二、QT+opencv使用
1.版本介绍
QT5.12.7+cmake3.22.0+opencv4.5.4
2.安装cmake编译opencv源码(mingw32编译)
(1)opencv的安装过程是对源码的解压复制
(2)opencv安装解压后的目录:build文件夹vs编译的文件,使用vs套件编译qt源码的可以直接使用此文件夹下的文件,sources文件夹opencv的源代码,mingw32套件编译qt源码的项目需要先使用mingw32编译器编译opencv源码,然后引入QT进行使用。
3 编译步骤
(1)配置环境变量,将cmake和QT的mingw32编译器的路径添加到Path环境变量中(注意:QT两个路径)
(2)QT的两个路径,一个是gcc和g++编译器所在的路径,一个是qmake所在的路径
(3)打开cmake-gui界面,"Where is the source code"选项选择opencv源码的文件夹,"Where to build the binaries"选项选择一个新建的文件夹保存编译后的文件和编译过程中产生的中间文件
(4)选择完毕后,点击左下方的Configure按钮配置mingw32编译器
(5)选择MinGW Makefiles,"Specify native compilers"自定义编译器
(6)编译器选择QT的Tools目录下对应套件下的gcc和g++编译器来编译c和c++程序
(7)点击Finish便会开始进行opencv默认组件的编译
(8)ffmpeg下载报错,原因没有连接外网
解决办法:
https://github.com/opencv/opencv_3rdparty下载正确版本的ffmpeg,opencv4.5.4对应版本20211005,将下载的文件中“ffmpeg_version.cmake”、“opencv_videoio_ffmpeg.dll”和“opencv_videoio_ffmpeg_64.dll”三个文件复制到opencv的下载缓存文件夹“sources\.cache\ffmpeg”中,然后打开cmd窗口切换到此文件夹,然后输入命令“certutil -hashfile 文件名 MD5”查看文件的MD5码,查看和未下载成功文件的MD5码是否相同,相同则修改文件名,然后重新点Configure
替换前
替换后
文件大小不对便是没有下载成功
(9)Configure之后窗口没有报红便编译成功了
(10)组件设置,可以在Search框中直接搜名字查找
”CMAKE_BUILD_TYPE“设置编译类型,Debug和Release
”WITH_1394“选择框选中
“WITH_OPENGL”选择框选中
“WITH_QT”选择框选中
然后再次点击Configure
(11)Configure完毕后将QT的一些路径进行设置为自己本地安装的QT路径,这是以后编译QT项目时候使用到的文件查找路径
(12)设置完毕后再次Configure
(13)框中显示Configure done便完成了配置
(14)点击Generate生成Makefile,完成后显示“Generating done”
(15)关闭cmake-gui,打开cmd,切换到opencv的编译路径下,开始使用mingw32进行编译安装,“mingw32-make -j8”,使用Makefile进行编译,“-j 8”表示使用8个线程进行编译,编译速度快一些,编译前可以先查看一下电脑的线程数
(16)编译libopencv_corexxx.dll报错中断退出
解决办法,返回cmake,添加Entry,名字为OPENCV_VS_VERSIONINFO_SKIP,Value选中,将CMAKE_CXX_FLAGS选项的值修改为“-std=c++11”,支持c11,然后再次Configure,Generate
(17)再次mingw32-make -j8进行编译,成功编译后进行安装
(18)使用mingw32-make install命令进行安装,安装成功后便会在同级目录下生成一个install文件夹
4.QT使用opencv
(1)将opencv的install文件夹下的“\x64\mingw\bin”,路径添加到环境变量Path
(2)新建QT项目,注意:选择编译套件的时候一定要选择和opencv编译时候用的套件一致
(3)QT项目在pro文件中使用INCLUDEPATH引入opencv的头文件
(4)LIBS引入opencv的静态文件
1 INCLUDEPATH += D:\apps\Opencv\opencv\mingw32-build\install\include
2 LIBS += D:\apps\Opencv\opencv\mingw32-build\lib\libopencv_*.a
(5)引入头文件#include "opencv/opencv.hpp"
(6)使用cv命名空间using namespace cv;
(7)编写代码运行
5.发布程序
使用windeployqt程序将qt的dll文件复制到程序目录下,然后运行程序,因为缺少opencv的dll文件会报错,程序无法运行,根据报错时提示缺少哪些dll文件,到opencv的install目录下复制到发布的应用程序同级目录下,问题解决。