前言:
前段時間寫了很多OpenCV的程序,雖然重點在算法上,但圖像窗口只能靠cvNamedWindow,效果很不理想。遂希望用Qt配合OpenCV使用,為我的程序建立圖形化界面。然而,依我對OpenCV的了解,環境配置一定是玄學,在解決了多個問題后,終於實現了Demo,在這里分享下我的成果,也感謝文末參考資料中的各位博主。
Qt在Windows環境下有兩種編譯方式,MinGW和msvc。msvc就是微軟的VC運行庫,只要安裝了Visual Studio就自帶了,在編譯速度上比較有優勢。缺點是,采用msvc編譯的話,需要單獨安裝cdb調試工具,才能在Qt中進行單步調試,本文將采用Win10 64bit+opencv 2.4.10 + Qt5.8.0 + VS2013配置環境。
第一步:安裝與配置OpenCV
在此,我們假設你的電腦上已經安裝了Visual Studio,本文將不再贅述。因為某些歷史問題,我的OpenCV的版本為2.4.10,如果你的版本也是2.x.x,那么你可以直接將2410替換成你的版本。
- 從http://opencv.org/downloads.html下載OpenCV並解壓到一個目錄中,我們假設解壓到了"D:\opencv\"中。
- 配置環境變量,在系統->高級系統設置->環境變量->系統變量中,找到Path,並添加"D:\opencv\build\x64\vc12\bin"。請注意上面路徑中的x64/vc12是需要根據你系統的版本自行替換的。
第二步:安裝與配置Qt
- 從https://account.qt.io/downloads下載Qt,並注冊賬戶、開始安裝。注意在安裝過程中需要選擇MSVC2013 64bit的kit,當然,這也需要根據你系統的版本進行替換。
- 新建一個Qt Widges Application,注意勾選VSVC2013。如果一切就緒,Qt Creator中應該為下圖所示。
- 可以看到,一個簡單的Qt項目由.pro文件,頭文件、源文件、界面文件組成,今后我們都將用到。我們需要從.pro文件開始修改
第三步:配置開發環境
.pro文件與vs中的屬性表類似,決定了項目需要的頭文件、依賴項的位置。在這一步我用來相當多的時間來找到合適的配置,一個典型的配置表如下所示:
1 INCLUDEPATH += D:/opencv/build/include 2
3 CONFIG(debug, debug|release): { 4 LIBS += -LD:/opencv/build/x64/vc12/lib \ 5 -lopencv_core2410d \ 6 -lopencv_imgproc2410d \ 7 -lopencv_highgui2410d \ 8 -lopencv_ml2410d \ 9 -lopencv_video2410d \ 10 -lopencv_features2d2410d \ 11 -lopencv_calib3d2410d \ 12 -lopencv_objdetect2410d \ 13 -lopencv_contrib2410d \ 14 -lopencv_legacy2410d \ 15 -lopencv_flann2410d 16 } else:CONFIG(release, debug|release): { 17 LIBS += -LD:/opencv/build/x64/vc12/lib \ 18 -lopencv_core2410 \ 19 -lopencv_imgproc2410 \ 20 -lopencv_highgui2410 \ 21 -lopencv_ml2410 \ 22 -lopencv_video2410 \ 23 -lopencv_features2d2410 \ 24 -lopencv_calib3d2410 \ 25 -lopencv_objdetect2410 \ 26 -lopencv_contrib2410 \ 27 -lopencv_legacy2410 \ 28 -lopencv_flann2410 29 }
請注意,在絕大多數情況下這個配置需要經過修改才能使用!與之前一樣,我們依然假設你的安裝目錄在"D:\opencv"所以如果不符,需要將三處目錄位置全部修改。另外開頭提到過,我的版本為2.4.10,所以如果版本不符,則需要將2410替換成其他數字。如果你的系統為x86,則需要修改目錄中的x64為x86。
在執行完上述操作后,需要點擊Qt Creator中的構建->執行qmake來更新程序的依賴。
為了快速驗證環境是否配置正確,我們用一段簡單的程序來驗證可否使用opencv
1 #include <iostream>
2 #include <opencv2/opencv.hpp>
3
4 using namespace std; 5 using namespace cv; 6
7 int main(int argc, char *argv[]) 8 { 9 Mat image = imread("D:\\test.jpg"); 10 cvNamedWindow("window", CV_WINDOW_NORMAL); 11 imshow("window",image); 12 waitKey(0); 13 }
點擊運行之后,如果沒有任何錯誤,可以顯示圖片,那么環境安裝成功,如果出現錯誤,我們需要進行排查。
1.提示沒有找到opencv.hpp
這種情況說明include path設置有問題,請檢查是否正確。如果是正確的卻依然報錯,請重新qmake、構建程序。
2.提示多條LKN錯誤,”無法找到入口“之類的
這種情況通常是因為Lib設置錯誤,請檢查位置是否正確、版本是否正確。更正后重新qmake。
3.編譯可以通過,但是提示程序crash
如果確認沒有1、2中提到的問題,請檢查環境變量是否正確,如果正確卻依然報錯,請注銷用戶后重新登陸,使環境變量生效。
4.程序運行后崩潰,提示OpenCV Error: Assertion failed (size.width>0 && size.height>0)
如果確認你的test.jpg可以讀取,那么可能遇到了跟我一樣的問題。在Qt的.pro文件中,一定要注意區分debug模式帶d的lib與release模式的lib,如果兩者沒有用指令判斷,那么很有可能可以通過編譯運行,但會出現類似於這種的奇怪錯誤。解決方法綜合2、3,重點檢查lib文件與系統環境變量是否正確。版本錯誤、路徑錯誤、x86與x64錯誤都可能導致類似的問題出現。
第四步:配置debugger
1.安裝cdb
首先下載Debugging tools for Windows,選擇本機安裝,之后只選擇安裝Debugging Tools for Windows即可。
2.配置Qt
選擇工具->選項->構建和運行。如果沒有自動檢測到安裝的cdb,那么手動添加一個即可,只需要選擇cdb安裝位置中的cdb.exe即可,Qt會自動檢測到類型版本等數據。
最后,添加一個斷點試驗一下
如果一切正常,那么恭喜你已經成功配置了opencv。當然,一次成功的可能性很小,往往需要我們耐下心來,反復調試。