Qt and OpenCV 3 on Windows (使用 MinGW)

介紹一下怎麼在 Windows 下使用 Qt 和 OpenCV 3.

系統環境

  • Windows 7
  • Qt5.10.0 (編譯器選擇 mingw530_32)
  • OpenCV 3.3.1 (準備用 mingw 來 build)
  • Cmake

安裝 Qt

先從官網下載 Qt, 目前最新為5.10, 安裝好之後
並把 Qt dll 路徑加進系統環境變數裡 (這步很重要, 因為要用它來編譯OpenCV)

1
2
C:\Qt\Qt5.10.0\5.10.0\mingw53_32\bin
C:\Qt\Qt5.10.0\Tools\mingw530_32\bin

編譯 OpenCV (使用 MinGW 編譯)

從官網下載 OpenCV 並解開, 執行下列指令

1
2
3
4
cd opencv-3.3.1
mkdir build
cd build
cmake-gui.exe ..

在make-gui上按照下方流程進行

1
2
3
選擇 MinGW Makefiles  
選擇 Use default native compilers
再按 Finish

按 Configure 會報錯說沒設定 CMAKE_CXX_COMPILERCMAKE_C_COMPILER
不管它再按一下 Configure 他會自動找到

1
2
勾選 WITH_OPENGL
勾選 WITH_QT

再按一下 Configure, 再按 Generate
接下來就可以開始編譯與安裝

1
2
mingw32-make -j8
mingw32-make install

把 OpenCV dll 目錄加進系統環境變數裡 (這步很重要, 否則執行期間會找不到dll)

1
C:\opencv\build\x86\mingw

之後在 Qt 專案檔 .pro 加入下列變數

1
2
3
4
5
6
7
8
INCLUDEPATH += C:\opencv\build\include
LIBS += -LC:\opencv\build\x86\vc14\lib \
-lopencv_core331 \
-lopencv_highgui331 \
-lopencv_imgcodecs331 \
-lopencv_imgproc331 \
-lopencv_features2d331 \
-lopencv_calib3d331

搞定結束!

疑難雜症

Q. 遇到 windres.exe: unknown option -- W 編譯錯誤怎辦?
A. cmake 取消勾選 ENABLE_PRECOMPILED_HEADERS

Q. 遇到 modules/videoio/src/cap_dshow.cpp error: 'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope 編譯錯誤怎辦?
A. 編輯 opencv-3.3.1/modules/videoio/src/cap_dshow.cpp
#include "DShow.h" 前面加入 #define NO_DSHOW_STRSAFE 定義

參考文章
https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows
https://ricky.moe/2017/06/17/qt5-6-2-opencv3-1-integration/

其它相關文章推薦
[Qt] 讀檔,讀取 txt 文字檔
[Qt] 寫檔,寫入 txt 文字檔
安裝 Qt 在 Windows 7 (使用MSVC)
Qt產生的exe發布方式
Qt 新增多國語言.ts翻譯檔案
Qt5的中文亂碼問題如何解決