VS2015+OpenCV3.3.0+QT5.9.2 Demo
想用QT作為OpenCV的GUI界麵,有界麵更正式些,但是之前看了幾篇博文操作零零碎碎的,這次準備記錄下來,靠一段落。記錄不是很完整,以後在補充。
筆記目標
- 運行一個顯示圖片QT Demo;
- 運行一個顯示相機采集圖片的QT Demo;
- 筆記中複製了很多參考資料裏的文字;
準備工作
- VS2015 - VS2015是可以方便安裝VS插件的最高版本,VS2017好多不能安裝;
- OpenCV3.3.0 - OpenCV目前的最高版本;
- QT5.9.2 - QT5的最高版本;
為OpenCV配置QT
編譯OpenCV的時候選擇WITH_QT【2】,至於這個選項的作用,可能是指OpenCV的highgui模塊本身是否使用Qt,highg使用QT後higngui本身的窗口界麵會變成基於Qt的,比原來的要好看一些,而且自動集成了一些圖片縮放、保存等功能【2】。(那麼原來的highgui使用的是什麼GUI技術?)
勾選如上圖後,點擊Configure,得到如下圖路徑或者通過輸入QT搜索得到勾選WITH_QT後重新配置產生的關於QT的項目。
但是上圖有一個問題,就是QT相關的路徑都是Anaconda下的,而我自己安裝了是最新的QT5.9.2版本,我不清楚這幾個選項的具體作用,不過改成QT5.9.2應該是沒錯的,於是把Anaconda相關的路徑都替換成自己安裝的QT5.9.2的路徑,如下圖所示,因為OpenCV3.3.0當初用CMAKE編譯選擇的Generator就是Visual Studio 14 2015 win64,所以QT的預編譯版本也選擇對應版本。
再Configure一下,然後再Generate,之後Open Project。
點擊Open Project按鈕打開生成的VS工程,待其完全載入後即可編譯了,需要注意的是,不要使用默認的生成解決方案(F7)進行編譯,這樣最終得到的install文件夾中的內容是不全的。正確方法是在INSTALL工程上點右鍵,選擇生成,還是選擇重新生成吧,單獨編譯生成此工程【3】。
編譯時選擇的安裝路徑,如下圖
編譯是選擇的生成對象為動態庫類型,如下圖
生成的動態庫,如下圖
不過如果想對OpenCV源碼進行**Debug跟蹤**,是不能選用.\install文件夾中的庫文件的,因為此處缺少**.pdb調試文件**,無法正常Debug。此時需要使用**.\lib**文件夾中的庫文件,這時可以正常的跟蹤到源代碼中,且使用profiler分析代碼性能時也可以正確定位到OpenCV內部函數上【3】。
關於庫、DLL、lib、pdb概念的理解,我理解庫是相對的,如果拿遊戲類比,庫就好比是武器裝備庫,而每件武器可能又有自己的配件庫,庫的內容不同大小不同,但是調用方式是相同的【4】。參考資料【4】給出的最小原型動態鏈接庫可以和QT庫、OpenCV庫在調用配置上等價。
這裏隻說下對OpenCV的DLL的理解,更準確的參考資料【5】。
OpenCV其實是一個一個的功能模塊,每個模塊對應一些CPP文件和H文件,CPP文件經過編譯就生成DLL(而普通軟件生成EXE)和LIB(這是用於LINK的,可以理解為一個DLL的偽靜態LIB占位符,否則的話就是靜態LIB了)。
而頭文件H文件就被搬運到一個專門的INCLUDE目錄。
使用庫的人叫做客戶端Client或者應用程序Application,他們要使用庫的功能,其實就是使用那些模塊函數了,就要配置項目。配置的話也無非3個方麵,其中第3個方麵又分為2個,所以一共4個地方需要配置:
- 頭文件的路徑;
- DLL的路徑,由於DLL是程序運行時的才調用,所以DLL路徑假如係統環境變量;
- 占位符偽LIB的路徑,這個特殊點,要配置2個方麵,其實也不難理解。一個就是LIB的路徑,一個就是要該路徑下的哪些LIB,全要的話自然生成的程序體積就大了。不過對於DLL來說,占位符的偽LIB體積不大多了也沒事。
參考資料
【1】VS2015搭建Qt 5.7開發環境
【2】OpenCV與Qt結合使用
【3】VS2015下編譯OpenCV 3.1
【4】Walkthrough: Creating and Using a Dynamic Link Library (C++)
【5】DLLs in Visual C++
【6】How to build applications with OpenCV inside the "Microsoft Visual Studio"
【7】將 Qt 5.6 集成至 VS2015
【8】詳解 QT 框架中快速應用OpenCV 基於圖片 上篇
最後更新:2017-10-25 22:03:42