2017-2-23 Update: 修改並添加了部分細節
最近正在學習OpenCV ,為畢業設計做准備。Windows版本的OpenCV都默認提供對VS的支持,其在VS中的配置比較簡單,網上也有大批教程詳細描述了配置步驟。但在使用Qt Creator時的配置就較為繁瑣,網絡上大多數教程使用的軟件版本也比較陳舊,經反復嘗試后終於成功,特將配置步驟記錄下來,以便以后及他人查閱參考。
我將編譯好的庫文件上傳到了雲盤中,如果你的開發環境與我相同,可以在最下方直接下載。
1. 前期准備
本機環境及使用軟件:
- Windows 7 64位
- OpenCV 3.1.0 : https://sourceforge.net/projects/opencvlibrary/files/ (3.2.0也適用)
- Qt 5.7.0 : http://www.qt.io/ or http://download.qt.io/
- MinGW 5.3.0 : 包含在Qt中,無需單獨下載。
- CMake 3.7.2 : https://cmake.org/
另外:本機中還安裝了VS2015,它的影響會在下文中提及。
首先,建議上述所有軟件的安裝路徑都不要包含中文或空格 。
OpenCV 目前(2017.2)最新版本為3.2.0。安裝OpenCV其實就是解壓,盡量解壓在某盤根目錄或較短的目錄下,我們只用其中的“sources”文件夾。對於本文來說,因為需要重新編譯源碼,也可以只到github上下載源碼: https://github.com/opencv/opencv 。
Qt 目前最新版本為5.8.0。鑒於國內網絡環境,建議下載離線版。關於Qt的安裝與配置,可在另一篇博客中查看(未完成),安裝過程中要勾選安裝MinGW。本人使用的版本為: qt-opensource-windows-x86-mingw530-5.7.0 。
CMake主要用來生成Makefiles,與MinGW中的編譯器配合使用。安裝過程中注意勾選“為所有用戶添加環境變量”:Add CMake to the system PATH for all users 。
確保上述軟件安裝好之后,可進行下一步操作。
2. CMake中的操作
打開CMake (cmake-gui)。
第一行源代碼位置,選擇 ..\opencv\sources 文件夾,如:D:\opencv\sources 。
第二行是編譯輸出的目錄,建議放在某盤根目錄或較短的目錄下,如 D:\opencv_mingw 。

點擊configure,在彈出窗口的下拉列表里選擇MinGW Makefiles,選項選擇Specify native compilers,點擊Next;
注:因為本機中安裝了VS,如果選擇第一項“適用默認本地編譯器“,會使用VC編譯器。而我們需要為Qt使用mingw的編譯器,因此需要手動指定編譯器。如果讀者也安裝過VS,則需注意這個問題。

指定編譯器,在Qt自帶的MinGW的目錄下:
- C 編譯器:C:/Qt/Qt5.7.0/Tools/mingw530_32/bin/gcc.exe
- C++編譯器:C:/Qt/Qt5.7.0/Tools/mingw530_32/bin/g++.exe
- Fortran不用填寫

點擊finish,此過程必須聯網,因為需要下載幾個文件。
等待一會兒后,會有一堆紅色出現,無需擔心。找到並勾選WITH_QT,如果要用OpenGL的功能可以勾選WITH_OPENGL,不能勾選WITH_IPP(默認不勾選)
有的教程上說要在CMAKE_BUILD_TYPE處添加“Debug” ,不添加也不影響。

再次點擊configure,若還有紅色出現,再點擊configure直到紅色消失。
點擊Generate按鈕,完成后即可關閉CMake。
3. cmd下的操作
首先必須在環境變量中添加mingw的目錄:C:\Qt\Qt5.7.0\Tools\mingw530_32\bin
打開cmd,轉到用CMake生成的目錄,如: cd /d D:\opencv_mingw
小提示:除了cd命令,還可以在要轉到的目錄下按住shift同時右鍵,點擊“在此處打開命令窗口”。
之后輸入 mingw32-make , 之后就開始漫長的等待。。。
[100%] 后輸入 mingw32-make install ,稍等即可。
4. 精簡編譯好的庫文件
編譯完成后會發現目標文件夾有一個多G大小,無需擔心,我們只需要其中的一部分。
網上很多教程都說要:[保留“bin”、“lib”文件夾,再將原始OpenCV庫中的“include”拷貝過來]。這里與其他教程不同的是,我建議只保留 install 文件夾,其他都可以刪除。
詳細解釋如下;觀察install目錄結構:

小技巧:想生成目錄結構到txt文件,可在cmd中轉到某目錄,輸入tree /f > list.txt。
其中,etc中包含兩類已經訓練好的分類器,分為Haar特征和LBP特征,可以用在人臉識別等程序中;include中是需要的頭文件;x86/mingw中則包含bin和lib兩個文件夾,其中分別是動態鏈接庫和靜態鏈接庫。因此install中已經包含了所有需要的文件。
而install/x86/mingw中的bin和lib與上層目錄中的bin和lib有什么區別呢?觀察可以發現,install中的bin和lib中少了很多文件名中有“pref”和“test”的文件,這些文件實際上是不需要的。因此只保留install文件夾是最不浪費空間的做法。
刪除其他無用的文件夾后,我們所需的庫文件只有62.3 MB,壓縮一下只有14 MB,這已經很小了。我將制作好的庫文件上傳到了雲盤中,需要的話可以在最下方下載。
5.Qt Creator 中工程文件的配置
首先將編譯好的庫添加進環境變量,如 D:\opencv_mingw\install\x86\mingw\bin ,如不添加則會出現程序編譯通過但運行時提示“程序異常結束”的問題。
小提示:每次添加或刪除環境變量后,都要重啟Qt Creator才能生效。
打開Qt Creator,新建工程或者在已有工程文件中打開.pro文件,添加包含頭文件的語句:
INCLUDEPATH += D:\opencv_mingw\install\include
接下來,如果你想使用動態鏈接庫,則再添加:
LIBS += D:\opencv_mingw\install\x86\mingw\bin\libopencv_*.dll
而如果你想使用靜態連接庫,則要添加:
LIBS += D:\opencv_mingw\install\x86\mingw\lib\libopencv_*.a
這里都是使用了“*”包含了所有的鏈接庫,如果想只用一部分則可以這樣輸入:
LIBS += D:\opencv_mingw\install\x86\mingw\bin\libopencv_calib3d320.dll \
libopencv_core320.dll \
...
小提示:帶空格的庫路徑是不能直接使用的,需要按如下格式輸入:
INCLUDEPATH += $$quote(D:\Program Files\opencv_mingw\install\include)
LIBS += -L $$quote(D:\Program Files\opencv_mingw\install\x86\mingw\bin\libopencv_*.dll)
在工程上右鍵點擊執行QMake 。

之后進行正常的編譯運行即可。
6. 示例程序
網絡上的教程到最后示例程序這一步時,很多都是將Qt的原有結構刪除,直接給一個opencv的簡單程序就完事兒,一般都是顯示一張圖片。
我這里高級一點,給一個調用攝像頭並顯示圖像的簡單示例。這個程序摘自毛星雲(淺墨)的《OpenCV3編程入門》。
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
//【1】從攝像頭讀入視頻
VideoCapture capture(0);
//【2】循環顯示每一幀
while(1){
Mat frame; //定義一個Mat變量,用於存儲每一幀的圖像
capture>>frame; //讀取當前幀
imshow("video",frame); //顯示當前幀
waitKey(30); //延時30ms
}
return 0;
}
如果配置正確而且用的是筆記本,應該會出現自己的臉。這時可以用鼠標滾輪放大縮小一下看看效果:

但是,如果不去利用Qt設計界面的便捷特性,只是使用Qt Creator這個IDE寫着跟VS下一樣的程序,有什么意義呢?
所以我想提供一個讓OpenCV 與Qt 結合使用的例子,示例程序可以參看我翻譯的幾篇國外網站上的[OpenCV Qt教程] !
編譯好的庫文件:http://pan.baidu.com/s/1c2MNJ9I
本人在配置過程中主要參考了以下兩篇文章。
http://stackoverflow.com/questions/15881913/how-to-link-opencv-in-qtcreator-and-use-qt-library
