1. 程式人生 > >2016 mingw 5.3.0 + Qt 5.7.0 + opencv 3 under windows7

2016 mingw 5.3.0 + Qt 5.7.0 + opencv 3 under windows7

參考

準備工作,注意統一版本,如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
    ,也無法得到Qt toolbar.
  • 離線安裝VS線上安裝:線上安裝可以提供更多的支援,如可以同時提供VS支援,並下載安裝更多的版本,還能進行維護和更新。離線安裝,可能就是下載速度快一點吧,下面選擇的是離線安裝。注意Qt的版本,選擇通過MinGW5.3.0編譯的Qt
    這裡寫圖片描述
  • 在安裝過程中,工具中附加mingw5.3.0
    這裡寫圖片描述
  • 安裝 opencv3 : 直接從github 上下載最新的版本,否則安裝時opencvopencv_contrib 將可能不協調,導致安裝失敗。如果你不想使用opencv_contrib中的一些功能,如sift特徵點之類,你可以不下載使用opencv_contrib
  • 安裝 cmake
    :直接從 https://cmake.org/download/ 下載,注意保持統一的版本,即32位。但感覺用64位的cmake也沒有關係,畢竟只是一個將CMakeList.txt 轉換為Makefile 的小工具。

裝置環境變數

  • 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 目錄下的可執行程式

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位的區別
    • 版本是否一致?
    • 系統路徑中是否存在程式或庫的順序問題?(即多個同名程式或庫,導致出現覆蓋的問題)