1. 程式人生 > 實用技巧 >兩種方法實現QT Creator對opencv的配置

兩種方法實現QT Creator對opencv的配置

前言:最近在PC端QT下配置opencv,做了一個6路攝像頭同時呼叫的功能模組,在QT配置opencv時遇到了很多坑,這裡記錄一下,希望能幫到需要的人;

本機環境:Windows7-64位
Qt Creator 4.5.1
OpenCV 3.2.0
CMake 3.18.4
最後結果,親測可用

安裝包全部打包,提供百度雲連結:
連結:https://pan.baidu.com/s/1aeHHchGvX4Zf6BWnUDR5tg
提取碼:6666

總共有兩種方式可以完成配置,都需要先安裝配置CMake,上述三個安裝包會上傳到百度雲提供下載;

1:安裝CMake:
編譯opencv需要用到CMake這個工具,安裝過程中選擇第2個,為所有使用者新增系統路徑。之後Qt就可以自動找到CMake的路徑

在這裡插入圖片描述
一直下一步,直到安裝完成;

接下來將CMake安裝路徑下的bin路徑加入系統環境變數的path中,
具體操作:右鍵我的電腦->屬性->高階系統設定->環境變數->系統變數中雙擊path進行路徑新增,
例如我這裡是D:\QTC++\cmake\bin;
在這裡插入圖片描述
新增完成後,點選確認,CMake就配置完成了;

2:QT Creator安裝配置:
下載QT的安裝包,進行安裝,安裝過程中需要注意兩個地方,
一個是需要註冊才能進行下一步,這裡我們不需要註冊,只要斷網再進行安裝就可以跳過這一步
在這裡插入圖片描述
另一個是安裝元件選擇的時候,需要點選全選
在這裡插入圖片描述
其餘都沒什麼可說的了,就是一直下一步,知道安裝結束,就可以開啟QT了;

安裝完成後,需要配置環境變數,將QT安裝路徑下的5.10.1資料夾下的msvc2017_64的bin路徑加入path中;
以及安裝目錄下Tools資料夾下的mingw530_32中的bin路徑加入path中;;
例如我的路徑為
D:\QTC++\5.10.1\msvc2017_64\bin;
D:\QTC++\Tools\mingw530_32\bin;
在這裡插入圖片描述
在這裡插入圖片描述

新增完成後點選確定退出,QT就配置結束了;

3:opencv安裝配置:
opencv安裝較為簡單,一步完成,就不細說了。

將VC14下的bin路徑加入path路徑中
例如我這裡是:D:\Opencv\opencv\build\x64\vc14\bin

4:在…\opencv\sources\modules\videoio\src\cap_dshow.cpp檔案中進行修改(這一步異常關鍵)

在#include "DShow.h"這一行前加上#define NO_DSHOW_STRSAFE

至此,以上三個需要的工具軟體都已經安裝配置結束,接下來就是進行QT下opencv的配置工作了,一共兩種方式,分開講述:

方式一:
使用CMake進行opencv的編譯工作:
開啟CMake,進行配置
我這裡新建的資料夾為buildopencv,用來存放編譯生成的opencv包
在這裡插入圖片描述
這裡一定不要選錯了選擇MinGW Makefiles,下面選擇第二個,點選next
在這裡插入圖片描述
配置C和C++編譯器路徑(P.S.具體路徑請根據自己電腦中QT的安裝目錄)
例如我這裡是:
D:\QTC++\Tools\mingw530_32\bin\gcc.exe
D:\QTC++\Tools\mingw530_32\bin\g++.exe
點選finish
在這裡插入圖片描述
配置完成後,如果順利就會出現下列介面,紅色只有兩條(這裡部分圖是用的別人的,所以部分路徑不太統一,一切以自己情況為主),點選Configure進行配置
在這裡插入圖片描述
配置完成後,出現以下介面,接下來就是關鍵點,請務必仔細:
在這裡插入圖片描述

<1>取消勾選 ENABLE_PRECOMPILED_HEADERS
<2>勾選WITH_OPENGL
<3>勾選WITH_QT
勾選完成後,再次點選【Configure】

之後出現下圖,這些紅色的是需要修改路徑的,但是我在配置的過程中,發現有的時候不需要再修改路徑,有的時候需要修改路徑;怎麼判斷呢?就是看一下路徑中是否都包含mingw53_32,如果包含,證明路徑本身就是正確的,直接點選【Configure】即可。如果不包含,則需要手動修改路徑,需要改
QT_QMAKE_EXECUTABLE值為:D:/DiyProgram/Qt/5.8/mingw53_32/bin/qmake.exe

Qt5Concurrent_DIR值為:D:\QTC++\5.10.1\mingw53_32\lib\cmake\Qt5Concurrent

Qt5Core_DIR 值為:D:\QTC++\5.10.1\mingw53_32\lib\cmake\Qt5Core

Qt5Gui_DIR 值為:D:\QTC++\5.10.1\mingw53_32\lib\cmake\Qt5Gui

Qt5Test_DIR 值為:D:\QTC++\5.10.1\mingw53_32\lib\cmake\Qt5Test

Qt5Widgets_DIR 值為:D:\QTC++\5.10.1\mingw53_32\lib\cmake\Qt5Widgets
在這裡插入圖片描述
再次點選【Configure】後,就不會再出現紅色條目了,這個時候注意了,如果列表中有python3這一項,推薦取消勾選,這樣可以防止部分機型編譯出錯:
在這裡插入圖片描述
上步執行完畢後,點【Generate】,完成後,可以關閉CMake了;

進入編譯後的生成檔案目錄D:\build_opencv,然後該資料夾的空白處Shift+右鍵,選擇“在此處開啟命令視窗”。

輸入“mingw32-make”命令,按回車進行編譯。這個過程非常久,電腦配置比較好的半小時左右,一般的一小時左右。
在這裡插入圖片描述

當他到達百分之百之後,輸入 “mingw32-make install ”等到安裝完成關閉即可。

新增新生成的bin到Path環境變數:
D:\QTC++\buildOpencv\bin 新增到Path環境變數中,完成;

至此,第一種配置方法完成,開啟QT,在.pro檔案中的底部,新增如下內容

INCLUDEPATH += D:\Opencv\opencv\build\include
D:\Opencv\opencv\build\include\opencv
D:\Opencv\opencv\build\include\opencv2

LIBS +=D:\QTC++\buildOpencv\lib\libopencv_*.a

至此,配置完成,即可開始進行QT下的opencv應用開發了;

方式二:
使用QT本身呼叫CMake進行opencv的編譯配置 :

確認Qt成功找到 CMake

開啟 Qt Creator,工具->選項->構建和執行->CMake,如果之前 CMake 配置好了系統路徑,這裡應該會自動載入到系統路徑,否則手動指定CMake的路徑。
在這裡插入圖片描述
用 Qt 開啟 opencv 專案

開啟opencv安裝目錄下sources目錄下的CMakeLists.txt檔案,QT就會自動進行opencv包的讀取工作
讀取過程中,進入【專案】,編譯構造配置選擇Release。
在這裡插入圖片描述
等幾分鐘,這段時間 Qt 正在讀取 CMakeLists.txt 檔案,當在概要資訊看到 Configuring done 和 Generating done 就證明讀取完了。
在這裡插入圖片描述
進入【專案】,找到 CMAKE_INSTALL_PREFIX,設定一個路徑,這個路徑是編譯完成後輸出的路徑。其他配置保持預設。
<1>取消勾選 ENABLE_PRECOMPILED_HEADERS
<2>勾選WITH_OPENGL
<3>勾選WITH_QT
<4>如果有python3選項,也取消勾選
然後點選 Apply Configuration Changes。未儲存的內容會是粗體字,已改變的配置將會是斜體字,再點一次 Apply Configuration Changes,Apply Configuration Changes 按鈕將會變成灰色。
在這裡插入圖片描述
再到構建步驟,詳情,勾選install,然後點右下角的“錘子”,開始構建。構建過程要保持網路通暢,因為構建時會下載部分檔案。這個過程會花半個小時左右。
在這裡插入圖片描述
構建完成後,繼續配置opencv系統路徑
對計算機右鍵->屬性->高階系統配置->環境變數>Path 變數里加入編譯後的opencv的bin資料夾的路徑,用分號跟其他路徑分隔。
例如我這裡是:
D:\Opencv\opencv\build-sources-Desktop_Qt_5_10_1_MinGW_32bit-Release\bin

接下里在QT的專案中的pro檔案中新增

INCLUDEPATH += D:\Opencv\opencv\build\include
D:\Opencv\opencv\build\include\opencv
D:\Opencv\opencv\build\include\opencv2

LIBS += D:\Opencv\opencv\build-sources-Desktop_Qt_5_10_1_MinGW_32bit-Release\lib\libopencv_*.a

至此,第二種配置方式也完成了;