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 版本下載:

至于 Qt5.12 和 CMake-3.20.0 的下載安裝,這里不再贅述,可以參考我以前的博客:
三、OpenCV安裝
雙擊 opencv-4.6.0-vc14_vc15.exe 安裝包進行安裝,設置的安裝路徑最好和 Qt 安裝在同一個盤符,點擊 Extract 按鈕進行安裝:

安裝好后的 OpenCV 目錄如下:

四、配置系統環境變量
系統設置->高級->環境變量->選中Path->編輯->新建
新建如下環境變量:
E:\Technology\Qt5.12.8\5.12.8\mingw73_64\bin
E:\Technology\Qt5.12.8\Tools\mingw730_64\bin
E:\Technology\CMake\bin


五、編譯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-build

選擇 MinGW Makefiles,點擊 Specify native compilers,再點擊 next 按鈕:

選擇 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++.exe

(3)編譯報錯1,解決報錯
再次點擊 Configure 按鈕正式編譯之后,會報錯:

出現的錯誤信息是:
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.exe

這樣 CMake 就可以知道使用哪個工具來構建項目,解決了這個報錯。
(4)編譯報錯2,解決報錯
再次點擊 Configure 按鈕編譯,沒出現上面那個錯誤了:

但是等待較長一段時間后,編譯完成又報錯:

重點報錯內容是這段:
CMake Warning at cmake/OpenCVDownload.cmake:248 (message):
ADE: Download failed: 35;"SSL connect error"
提示 ADE 模塊下載失敗,SSL 連接錯誤。懷疑是網絡問題導致遠程下載失敗,這邊使用魔法解決了,沒有魔法的看能不能嘗試更改 DNS 解決。
再次點擊 Configure 按鈕編譯,沒出現上面那個錯誤了:

上面圖片中的紅框可以看到,使用魔法后,ADE 模塊開始正常下載了。
(5)編譯報錯3,解決報錯
等待編譯完成后,界面如下所示:

有幾行紅的,需要再配置下。下拉將 WITH_OPENGL 和 WITH_QT 選中,另外不勾選 BUILD_PROTOBUF;同時然后點擊 add Entry 按鈕,配置 OPENCV_VS_VERSIONINFO_SKIP=1(界面按鈕具體操作:add Entry -> Name:OPENCV_VS_VERSIONINFO_SKIP -> Type:Bool->Value 打鉤),如下:



(6)編譯報錯4,解決報錯
照上面那樣配置后, 再次點擊 Configure 按鈕,如果仍舊會出現一些紅色配置項,確認 OPENCV_VS_VERSION_SKIP 是勾選的和 BUILD_PROTOBUF 是不勾選的,如果沒有, 通過(界面按鈕具體操作:add Entry -> Name:OPENCV_VS_VERSIONINFO_SKIP -> Type:Bool->Value 打鉤)再次配置下。
這里等待一段時間后,仍舊會出現一些紅色配置項:

照上面那樣確認選項和配置了。再次點擊 Configure 按鈕,紅色消失,再直接點擊 Generate 按鈕即可成功編譯生成:

到這一步,就說明編譯完成了。
六、Powershell命令安裝OpenCV
關閉 Cmake GUI 界面, 然后進入 OpenCV 安裝目錄,鼠標選中 opencv-build 目錄,按住 shift 鍵,同時點擊鼠標右鍵,點擊在此處打開 Powershell 窗口(s)的右鍵菜單選項,進入 Windows Powershell,輸入:
mingw32-make -j 8

執行效果如下:


按回車鍵執行該命令,100% 完成之后,輸入:
mingw32-make install


完成之后退出,另外再將如下路徑按照前述方式加入環境變量即可:
E:\Technology\OpenCV\opencv\opencv-build\install\x64\mingw\bin

七、創建QT工程測試驗證
(1)創建OpenCV_Test工程
基于 QWidegt 方式創建,不勾選 ui 選項,創建完的工程目錄如下:

(2)測試代碼
OpenCV_Test.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += 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.0
SOURCES += \
main.cpp \
Widget.cpp
HEADERS += \
Widget.h
#很重要:主要添加這兩行,指定頭文件路徑和庫路徑
INCLUDEPATH += E:\Technology\OpenCV\opencv\opencv-build\install\include
LIBS += E:\Technology\OpenCV\opencv\opencv-build\install\x64\mingw\lib\libopencv_*.a
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
Widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
};
#endif // WIDGET_H
Widget.cpp
#include "Widget.h"
// 添加相關投文件和包
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
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 <QApplication>
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 個可執行文件,如下圖所示:

參考:
使用CMAKE工具MinGW編譯OPENCV報錯:CMake Error: CMake was unable to find a build program...如何解決?

浙公網安備 33010602011771號