1. 程式人生 > 其它 >Qt | mingw+cmake編譯Opencv4.1.2

Qt | mingw+cmake編譯Opencv4.1.2

OpenCV

獲取 OpenCV

從官網下載 openCV在本指南中,使用版本4.1.2啟動 opencv-3.2.0-vc14.exe 並讓它解壓到 d:\ 。現在資料夾 d:\opencv _4.1.2_Sources已建立。

將 minGW 新增到 windows PATH 變數

開啟控制面板, 
系統和安全, 
系統, 
高階系統設定,
環境變數,
系統變數,
變數名稱:路徑
變數值:;E:\Qt\Tools\mingw810_32\bin
PS:64位的則新增
E:\Qt\Tools\mingw810_64\bin

編譯 OpenCV

啟動 cmake-gui.exe 然後選擇以下設定:

 原始碼在哪裡:D:/opencv_4.1.2_Sources/opencv-4.1.2
 在哪裡構建二進位制檔案:D:/opencv_4.1.2_Sources/opencv-4.1.2/build

然後點選Configure,讓cmake建立build目錄,選擇如下設定:

 為此專案指定生成器:MinGW Makefiles
 指定本機編譯器,下一步
 編譯器 C:E:\Qt\Tools\mingw810_32\bin\gcc.exe
 編譯器 C++:E:\Qt\Tools\mingw810_32\bin\g++.exe
 結束
 選中複選框 [X]WITH_QT
 選中複選框 [X]WITH_OPENGL
將D:\opencv_4.1.2_Sources\opencv-4.1.2\CMakeLists.txt開啟新增如下程式碼,儲存後退出
將 Qt5_DIR 設定為E:/Qt/5.15.1/mingw81_32/lib/cmake/Qt5
 set(CMAKE_PREFIX_PATH "E:/Qt/5.15.1/mingw81_32/lib/cmake/Qt5")
PS:QT的版本看自己的安裝情況而定
 取消選中複選框 []ENABLE_PRECOMPILED_HEADERS

然後再次點選配置。

 將 QT_MAKE_EXECUTABLE 設定為 D:\Qt\5.9\mingw53_32\bin\qmake.exe
 將 Qt5Concurrent_DIR 設定為 D:\Qt\5.9\mingw53_32\lib\cmake\Qt5Concurrent
將 Qt5Core_DIR 設定為 D:\Qt\5.9\mingw53_32\lib\cmake\Qt5Core 將 Qt5Gui_DIR 設定為 D:\Qt\5.9\mingw53_32\lib\cmake\Qt5Gui 將 Qt5Test_DIR 設定為 D:\Qt\5.9\mingw53_32\lib\cmake\Qt5Test 將 Qt5Widgets_DIR 設定為 D:\Qt\5.9\mingw53_32\lib\cmake\Qt5Widgets 將 Qt5OpenGL_DIR 設定為 D:\Qt\5.9\mingw53_32\lib\cmake\Qt5OpenGL 將 CMAKE_BUILD_TYPE 設定為 Release
PS:此時生成的庫為分散的,並不是一個dll,引入的時候不方便,可以勾選BUILD_opencv_world將動態庫打包成一個

然後再次點選配置 然後點選生成

接下來開啟cmd,輸入以下命令。為了加快編譯速度,-j 標誌可用於同時執行多個編譯作業。在 8 核 CPU 上,您可以將其設定為 8 或更高,以便使用所有核心。在具有 8GB 記憶體的 [email protected] 核心上,編譯大約需要 6 分鐘。

 d:
 cd d:\
 cd opencv-build  
 mingw32-make -j 8
 mingw32-make install
 
 

如果在檔案 opencv/sources/modules/videoio/src/cap_dshow.cpp 中出現以下錯誤:'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' 未在此範圍內宣告...

試試這個:把下面這行:#define NO_DSHOW_STRSAFE,在行之前:#include "DShow.h"

如果您有錯誤:'nullptr' 未在此範圍內宣告..

試試這個:在 cmake 中選中 ENABLE_CXX11 框

如果在檔案 modules\videoio\src\cap_msmf.cpp 中出現錯誤: using invalid field '{anonymous}::ComPtr<T>::p'..

試試這個:在 cmake 中取消選中 WITH_MSMF