Qt+OpenCV環(huán)境搭建

最近想學(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)境搭建成功。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容