2016 mingw 5.3.0 + Qt 5.7.0 + opencv 3 under windows7
阿新 • • 發佈:2019-02-06
參考
準備工作,注意統一版本,如mingw5.3.0,32位。
- 安裝mingw 5.3.0: 在 http://www.mingw.org/ 上最新的mingw 版本為4.9.2,這個官網感覺已經在2013年停止開發了。新的mingw官網在 https://mingw-w64.org/doku.php mingw支援32位和64位系統。不必特別安裝mingw 5.3.0,因為可以通過Qt 附加安裝mingw 5.3.0
- 安裝Qt5.7.0: 在 https://www.qt.io/download-open-source 中選擇合適的版本,為了提供opencv的Qt toolbar支援(檢視畫素值,放大縮小圖片,方便除錯),Qt 的版本應該>5.3,否則即使在編譯opencv 時選擇 WITH_QT
- 離線安裝VS線上安裝:線上安裝可以提供更多的支援,如可以同時提供VS支援,並下載安裝更多的版本,還能進行維護和更新。離線安裝,可能就是下載速度快一點吧,下面選擇的是離線安裝。注意Qt的版本,選擇通過MinGW5.3.0編譯的Qt
- 在安裝過程中,工具中附加mingw5.3.0
- 安裝 opencv3 : 直接從github 上下載最新的版本,否則安裝時opencv 與 opencv_contrib 將可能不協調,導致安裝失敗。如果你不想使用opencv_contrib中的一些功能,如sift特徵點之類,你可以不下載使用opencv_contrib
- 安裝 cmake
裝置環境變數
- mingw5.3.0: 設定bin到path中,下面的指令碼其實我不會用,但可對照將PATH設定到環境變數中。開啟cmd,測試gcc,g++,make等,如果不清楚執行程式名,在bin目錄下進行對應:
@echo off
set MINGW_HOME=F:\YZBX\Qt\Qt5.7.0\Tools\mingw530_32
set C_INCLUDE_PATH=%MINGW_HOME %\include;
set CPLUS_INCLUDE_PATH=%MINGW_HOME%\lib\gcc\i686-w64-mingw32\5.3.0;%MINGW_HOME%\lib\gcc\i686-w64-mingw32\5.3.0\include;%MINGW_HOME%\include;
set LIBRARY_PATH=%MINGW_HOME%\lib;
set PATH=%MINGW_HOME%\bin;%MINGW_HOME%\i686-w64-mingw32\lib;%PATH%;
echo *** MinGW ENV SET OK ***
@echo on
mingw bin 目錄下的可執行程式
mingw 測試
執行cmake-gui
修改CMakeLists.txt 使得cmake 能自動找到 Qt5,這樣可以不用設定Qt5 環境變數,即加入
set(CMAKE_PREFIX_PATH "F:/YZBX/Qt/Qt5.7.0/5.7/mingw53_32")
選擇自定義mingw,否則會出現找不到libint-8.dll的錯誤。
將mingw bin下的路徑設定好
- 選擇 with_qt, with_opengl, opencv_enable_nonfree
- 設定 OPENCV_EXTRA_MODULES_PATH 為
I:/Win7/lib/opencv3/opencv_contrib/modules
Configure 到沒有錯誤再Generate
在cmd中,進入build目錄,執行make, make install
#在目錄I:/Win7/lib/build下執行
mingw32-make -j4
mingw32-make install
測試
- xxx.pro
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
INCLUDEPATH += F:/YZBX/opencv3/include
LIBS += -L"F:/YZBX/opencv3/x86/mingw/bin"
LIBS += -lopencv_core310 -lopencv_highgui310 -lopencv_imgproc310 -lopencv_imgcodecs310
- main.cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
cout << "Hello World!" << endl;
cv::Mat image= cv::imread("C:/Users/New User/Pictures/QtTool.PNG");
cv::namedWindow("test");
cv::imshow("test", image);
cv::waitKey(0);
return 0;
}
結果顯示,選擇中的區域即Qt toolbar
其它工作
- 設定 Qt5 環境變數,opencv3 環境變數。方便隨時隨地執行程式。
- 如果出現錯誤,注意以下細節
- 路徑用
\
與用/
的區別 - 是否選擇了BUILD_opencv_world模組?由於mingw並不是完全的linux環境,因此部分模組mingw暫時不支援。比如說world模組
- 32位與64位的區別
- 版本是否一致?
- 系統路徑中是否存在程式或庫的順序問題?(即多個同名程式或庫,導致出現覆蓋的問題)
- 路徑用