OpenCV学习(1):Qt5.12配置OpenCV4.6教程
一、OpenCV介绍OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,广泛应用于图像处理、视频分析、特征检测、机器学习等领域。
特点
[*]跨平台支持:支持 Windows、Linux、macOS、Android 和 iOS 等多种操作系统。
[*]多语言接口:提供 C++、Python、Java 和 MATLAB 等多种语言的接口。
[*]丰富的功能:包含超过 2500 个优化的算法,涵盖图像处理、视频分析、机器学习等多个领域。
[*]高效性:核心功能经过高度优化,适合实时应用。
[*]社区支持:拥有活跃的开发者社区,提供丰富的文档和教程。
应用场景
[*]计算机视觉:目标检测、人脸识别、姿态估计等。
[*]视频分析:运动检测、行为识别、光流计算等。
[*]机器学习:支持KNN、SVM、决策树等算法。
[*]医学影像处理:图像分割、特征提取、辅助诊断。
[*]自动驾驶:车道检测、交通标志识别、障碍物检测。
[*]工业检测:缺陷检测、产品分类、机器视觉。
二、OpenCV下载
通过官网地址下载:https://opencv.org/releases/
这里选择 OpenCV-4.6.0 版本的 Windows 版本下载:
https://s2.loli.net/2025/07/17/HLQK4qir8z7lEgW.jpg
至于 Qt5.12 和 CMake-3.20.0 的下载安装,这里不再赘述,可以参考我以前的博客:
[*]Qt快速入门之二:Qt Creator简介
[*]Windows下使用CMake编译SuiteSparse成VS工程
三、OpenCV安装
双击 opencv-4.6.0-vc14_vc15.exe 安装包进行安装,设置的安装路径最好和 Qt 安装在同一个盘符,点击 Extract 按钮进行安装:
https://s2.loli.net/2025/07/17/rDCeVnRW3z5cSyP.png
安装好后的 OpenCV 目录如下:
https://s2.loli.net/2025/07/17/3WkrJBtVOImZj6C.jpg
四、配置系统环境变量
系统设置->高级->环境变量->选中Path->编辑->新建
新建如下环境变量:
E:\Technology\Qt5.12.8\5.12.8\mingw73_64\binE:\Technology\Qt5.12.8\Tools\mingw730_64\binE:\Technology\CMake\binhttps://s2.loli.net/2025/07/17/1Q59LdaEo3OVzn4.jpg
https://s2.loli.net/2025/07/17/X1B4rS9Ml3YdJVz.jpg
五、编译OpenCV
(1)创建 opencv-build 目录
在 OpenCV 安装目录下创建 opencv-build 目录:
D:\opencv\opencv\opencv-build
(2)运行 cmake-gui.exe
双击 cmake-gui.exe 运行,分别配置 OpenCV 的源码目录和编译产生二进制的目录路径,如下所示,然后点击 Configure 进行配置:
# 源码目录E:/Technology/OpenCV/opencv/sources# 编译产生二进制的目录E:/Technology/OpenCV/opencv/opencv-buildhttps://s2.loli.net/2025/07/17/XjVASFGYMyOCZkx.png
选择 MinGW Makefiles,点击 Specify native compilers,再点击 next 按钮:
https://s2.loli.net/2025/07/17/E6DfBvcyTYhS75J.png
选择 gcc 和 g++ 工具路径,然后点击 Finish 按钮:
# gcc工具路径E:/Technology/Qt5.12.8/Tools/mingw730_64/bin/gcc.exe# g++工具路径E:/Technology/Qt5.12.8/Tools/mingw730_64/bin/g++.exehttps://s2.loli.net/2025/07/17/NWHI1ntUBDOv4co.png
(3)编译报错1,解决报错
再次点击 Configure 按钮正式编译之后,会报错:
https://s2.loli.net/2025/07/17/3bs6ewXrDyQ1gUl.png
出现的错误信息是:
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.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.Configuring incomplete, errors occurred!问题分析
这个错误通常是由于 CMake 无法找到正确的构建工具(如 MinGW 的 make 工具)造成的。CMake 需要一个构建程序(通常是 make 或 mingw32-make )来编译OpenCV。在你的环境中,CMake 无法识别 MinGW 工具链,导致无法生成适用于 MinGW 的 Makefile。
如果 CMake 找不到合适的构建工具,后续的编译过程将无法进行,导致 OpenCV 编译失败。因此,解决这个问题需要确保 MinGW 工具链正确配置,并且 CMake 能够正确识别并使用它。
问题解决方案
手动设置 CMake 的构建工具 :在 CMake 界面上,点击 Advanced ,然后在 CMake_MAKE_PROGRAM 选项中手动输入 mingw32-make 的完整路径,我这里是:
# mingw32-make.exe的完整路径E:\Technology\Qt5.12.8\Tools\mingw730_64\bin\mingw32-make.exehttps://s2.loli.net/2025/07/18/5ZerCmBzlExASqY.png
这样 CMake 就可以知道使用哪个工具来构建项目,解决了这个报错。
(4)编译报错2,解决报错
再次点击 Configure 按钮编译,没出现上面那个错误了:
https://s2.loli.net/2025/07/18/rXzvBO6AgeQGdMw.png
但是等待较长一段时间后,编译完成又报错:
https://s2.loli.net/2025/07/18/kWoXZ9Fi6EYsAKU.jpg
重点报错内容是这段:
CMake Warning at cmake/OpenCVDownload.cmake:248 (message):ADE: Download failed: 35;"SSL connect error"提示 ADE 模块下载失败,SSL 连接错误。怀疑是网络问题导致远程下载失败,这边使用魔法解决了,没有魔法的看能不能尝试更改 DNS 解决。
再次点击 Configure 按钮编译,没出现上面那个错误了:
https://s2.loli.net/2025/07/18/iPXeM1AkonsgOuj.png
上面图片中的红框可以看到,使用魔法后,ADE 模块开始正常下载了。
(5)编译报错3,解决报错
等待编译完成后,界面如下所示:
https://s2.loli.net/2025/07/18/GawDOjdmJXZfPkz.jpg
有几行红的,需要再配置下。下拉将 WITH_OPENGL 和 WITH_QT 选中,另外不勾选 BUILD_PROTOBUF;同时然后点击 add Entry 按钮,配置 OPENCV_VS_VERSIONINFO_SKIP=1(界面按钮具体操作:add Entry -> Name:OPENCV_VS_VERSIONINFO_SKIP -> Type:Bool->Value 打钩),如下:
https://s2.loli.net/2025/07/18/oQTRZsYSKprA6ka.jpg
https://s2.loli.net/2025/07/18/ijEBDw6VYJXQx7I.png
https://s2.loli.net/2025/07/18/yziBclXT2UsIkwS.png
(6)编译报错4,解决报错
照上面那样配置后, 再次点击 Configure 按钮,如果仍旧会出现一些红色配置项,确认 OPENCV_VS_VERSION_SKIP 是勾选的和 BUILD_PROTOBUF 是不勾选的,如果没有, 通过(界面按钮具体操作:add Entry -> Name:OPENCV_VS_VERSIONINFO_SKIP -> Type:Bool->Value 打钩)再次配置下。
这里等待一段时间后,仍旧会出现一些红色配置项:
https://s2.loli.net/2025/07/18/BY3Ve1AlTyOxpPv.png
照上面那样确认选项和配置了。再次点击 Configure 按钮,红色消失,再直接点击 Generate 按钮即可成功编译生成:
https://s2.loli.net/2025/07/18/dNtKpQ5FJ4S8Oc9.png
到这一步,就说明编译完成了。
六、Powershell命令安装OpenCV
关闭 Cmake GUI 界面, 然后进入 OpenCV 安装目录,鼠标选中opencv-build 目录,按住 shift 键,同时点击鼠标右键,点击在此处打开 Powershell 窗口(s)的右键菜单选项,进入 Windows Powershell,输入:
mingw32-make -j 8https://s2.loli.net/2025/07/18/X7hOLdQSTeoj6BE.png
执行效果如下:
https://s2.loli.net/2025/07/18/pWmPxuCDQN2vU3G.png
https://s2.loli.net/2025/07/18/Y8CZnrzdVMAiBah.jpg
按回车键执行该命令,100% 完成之后,输入:
mingw32-make installhttps://s2.loli.net/2025/07/18/8AHmIX5NB1ycwrx.png
https://s2.loli.net/2025/07/18/V5cZ4BaIfoDJ9Wu.png
完成之后退出,另外再将如下路径按照前述方式加入环境变量即可:
E:\Technology\OpenCV\opencv\opencv-build\install\x64\mingw\binhttps://s2.loli.net/2025/07/18/jUL1pQHkqNf4Icm.png
七、创建QT工程测试验证
(1)创建OpenCV_Test工程
基于 QWidegt 方式创建,不勾选 ui 选项,创建完的工程目录如下:
https://s2.loli.net/2025/07/18/SG8p6yzln4MIBrA.jpg
(2)测试代码
OpenCV_Test.pro
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use# any Qt feature that has been marked deprecated (the exact warnings# depend on your compiler). Please consult the documentation of the# deprecated API in order to know how to port your code away from it.DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.# In order to do so, uncomment the following line.# You can also select to disable deprecated APIs only up to a certain version of Qt.#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES += \ main.cpp \ Widget.cppHEADERS += \ Widget.h#很重要:主要添加这两行,指定头文件路径和库路径INCLUDEPATH += E:\Technology\OpenCV\opencv\opencv-build\install\includeLIBS += E:\Technology\OpenCV\opencv\opencv-build\install\x64\mingw\lib\libopencv_*.a# Default rules for deployment.qnx: target.path = /tmp/$${TARGET}/binelse: unix:!android: target.path = /opt/$${TARGET}/bin!isEmpty(target.path): INSTALLS += targetWidget.h
#ifndef WIDGET_H#define WIDGET_H#include class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = nullptr); ~Widget();};#endif // WIDGET_HWidget.cpp
#include "Widget.h"// 添加相关投文件和包#include #include #include using namespace cv;Widget::Widget(QWidget *parent) : QWidget(parent){ // 一定要使用绝对路径找到图片的正确为止,其他可以回报错 Mat image=imread("E:\\Learn\\Qt\\OpenCV_Qt\\OpenCV_Test\\demo1.jpg",1); namedWindow( "Display", WINDOW_AUTOSIZE ); imshow( "Display window", image );}Widget::~Widget(){}main.cpp
#include "Widget.h"#include int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}
(3)运行报错,解决报错
一开始直接运行报错:程序异常结束,并 crashed。
原因:
[*]项目那里默认勾选了影子创建(Shadow build)
解决方案:
[*]去除影子创建,然后程序还是会异常结束,我这边是把 Qt Creator 关闭,将原先的 build 目录删除,再重新打开 Qt Creator,编译运行才正常。(另外,最好使用 Release 方式运行)
(4)运行结果
运行有 3 个可执行文件,如下图所示:
https://s2.loli.net/2025/07/18/Hxd1RCcroZLbEA6.png
参考:
CMake Error: CMake was unable to find a build program corresponding to “MinGW Makefiles“.解决方案(亲测有效)-CSDN博客
使用CMAKE工具MinGW编译OPENCV报错:CMake Error: CMake was unable to find a build program...如何解决?
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除
页:
[1]