最近想學(xué)習(xí)的兩樣?xùn)|西,Qt和OpenCV,之前都有短暫使用過,但是用的不多。本文從環(huán)境搭建開始寫起。
本文使用的軟件版本及下載地址
Windows7_ultimate_x64
Qt 5.11.1 官方下載地址
CMake 3.12.1 官方下載地址
OpenCV 3.4.3 官方下載地址
Qt
Qt在安裝過程中需要選擇編譯器,本文使用C++作為開發(fā)語言,編譯器可以選擇MinGW或者MSVC,MSVC需要安裝相應(yīng)版本的Visual Studio作為支持,本文選擇MinGW,在安裝時要勾選相應(yīng)版本的MinGW。


CMake
OpenCV是使用c/c++編寫的,官方網(wǎng)站提供的版本Qt不能直接使用,需要使用CMake重新編譯Qt可用的版本。安裝時注意勾選“Add CMake to the system PATH for all users”。

OpenCV
安裝直接運行就可以。安裝完成后開始進行編譯。
添加MinGW環(huán)境變量
在Path下增加MinGW的路徑(根據(jù)自己的Qt安裝路徑有所不同,添加環(huán)境變量時注意用 ; 分隔),配置完成需要重啟電腦才能生效。
C:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin
C:\Qt\Qt5.11.1\Tools\mingw530_32\bin

編譯OpenCV
運行cmake-gui.exe,分別選擇OpenCV的源碼路徑和編譯輸出路徑

點擊Configure,進行配置如下,然后next

配置編譯器路徑,然后finish
C: C:/Qt/Qt5.11.1/Tools/mingw530_32/bin/gcc.exe
C++: C:/Qt/Qt5.11.1/Tools/mingw530_32/bin/g++.exe

第一次configure完成后,勾選 WITH_QT 和 WITH_OPENGL,再次點擊configure

第二次configure完成后, 將CMAKE_BUILD_TYPE修改為 Release,再次點擊configure

第三次configure完成后,點擊generate,生成結(jié)束后,打開cmd,進入編譯輸出目錄,執(zhí)行編譯指令(-j 表示多線程工作,電腦是幾核的CPU,后面的參數(shù)就可以設(shè)為多少,可以節(jié)省編譯時間)
d:
cd OpenCV
cd build-Qt
mingw32-make -j 4
mingw32-make install
編譯過程中如果遇到類似這樣的錯誤
... windres.exe: unknown option -- W ...
可以在配置Cmake時將 ENABLE_PRECOMPILED_HEADERS 關(guān)閉,重新進行編譯。
編譯過程中如果遇到類似這樣的錯誤
'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope
可以修改OpenCV的源文件,在cap_dshow.cpp文件中搜索
#include "DShow.h"
在這行代碼前增加
#define NO_DSHOW_STRSAFE
然后重新編譯可以解決。
編譯過程中如果遇到類似這樣的錯誤
using invalid field '{anonymous}::ComPtr<T>::p'
可以在Cmake配置中,將 WITH_MSFS 關(guān)閉,然后重新編譯可以解決。
編譯過程中如果遇到類似這樣的錯誤
‘nullptr’ was not declared in this scope
可以在Cmake配置中,將 ENABLE_CXX11 打開,然后重新編譯可以解決。
編譯成功后,將編譯生成的庫添加到系統(tǒng)環(huán)境變量中,在Path中增加(根據(jù)自己的編譯路徑)
D:\OpenCV\build-Qt\install\x86\mingw\bin
測試Qt+OpenCV環(huán)境
新建一個QWindow項目,名為TestOpenCV,修改項目配置文件TestOpenCV.pro,在文件末尾增加文件包含路徑及所需庫文件
INCLUDEPATH += D:\OpenCV\build\include
LIBS += D:\OpenCV\build-Qt\bin\libopencv_core343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_highgui343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_imgcodecs343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_imgproc343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_features2d343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_calib3d343.dll
修改mainwindow.cpp文件如下
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// read an image
cv::Mat image = cv::imread("d://1.jpg", 1);
// create image window named "My Image"
cv::namedWindow("My Image");
// show the image on window
cv::imshow("My Image", image);
}
MainWindow::~MainWindow()
{
delete ui;
}
運行成功后環(huán)境搭建成功。