opencv-2-VS2017與QT顯示圖像
目的
- 使用 VS 構建第一個 opencv 程序
- 使用 QT 構建 第一個 opencv 程序
- VS 導入 QT 程序
開始
我們需要設置 dll 文件的運行路徑, 避免運行的時候找不到相應的庫而報錯,
接下來, 我們需要使用
設置運行環境
我們整理得到了, 我們需要將 我們的dll 文件夾 加入到系統 的Path 路徑
過程如下: 此電腦--右鍵--屬性--高級系統設置--環境變量--系統變量--Path--編輯--新建
然后填入我們 dll 所在的文件夾即可


VS2017使用 opencv 程序
opencv 的官方給出了一個 windows Visual Studio 使用 opencv 的方法[1],
其實都差不多, 在 博客 Win10, VS2017環境下OpenCV3.4.2的配置 也是使用 包含目錄, 庫目錄, 以及附加依賴項進行的展示過程,
在后面執行之前, 的opencv 的目錄結構是存在 D:\Project\Vision\ImageLab\Depend\opencv
目錄下面的, 我們在前面介紹了每個文件夾里面的內容
- opencv430
- - dll
- - lib
- - include
新建工程
新建空的VS 項目, imagelab 在解決方案上右鍵, 點擊屬性進行配置即可

包含目錄與庫目錄
添加你的 include 文件夾和 lib 文件夾即可

這里使用的是我的 絕對路徑, 如果使用, 必須更改為你自己的路徑, 不然 肯定出錯.
庫文件
此處選擇的是相應的 opencv_world430d.lib
, opencv 在3.0 的版本之后, 只需要加入一個 world 的lib 文件即可, 不需要添加一系列的庫文件, 也可以單獨編譯得到 值添加單個的庫,

這里建議去看 Win10, VS2017環境下OpenCV3.4.2的配置 這篇博文, 寫的十分詳細,
編寫程序
- // 引入 opencv 函數頭文件
- int main()
- {
- // 設置 要顯示的圖像路徑
- std::string test_pic = "D:\\Project\\Vision\\ImageLab\\TestImages\\lena.png";
- // 讀取圖像
- cv::Mat lena_img = cv::imread(test_pic);
- // 顯示圖像
- cv::imshow("圖像顯示窗口", lena_img);
- cv::waitKey(0);
- return 0;
- }
調試運行
如果配置沒有問題, 注意上面配置 的都是 debug x64, 在編輯頁面也要是 一樣的嗎不能出錯, 不然編輯的不對, 點擊 生成--生成解決方案
如果程序復制過去的沒有問題, 就不會有問題了,
此處我默認看這里的人有了一定的 C++ 程序基礎, 不然解釋太多的話就很麻煩,

點擊綠色的 本地 windows 調試器
直接運行 就能看到這個窗口了

到這里, 我們的 VS 使用 opencv 就完成了 , 很容易就搞定了..
QT 使用 opencv 程序
QT 使用 opencv 更加簡單, QT的主要工程文件是 *.pro
文件, 我們可以在文件中加入一些配置信息 便於我們執行 可以參考Windows下QT Creator配置OpenCV(VC版)
新建工程
新建工程 imagelab , 在工程上右鍵, 添加庫
添加外部庫, 點擊選擇到 lib 文件, 會自動選擇 include
文件夾, 檢查一下是否包含正確,

最終會在 *.pro
文件中 添加
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/Depend/opencv/lib/ -lopencv_world430
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/Depend/opencv/lib/ -lopencv_world430d
INCLUDEPATH += $$PWD/Depend/opencv/include
DEPENDPATH += $$PWD/Depend/opencv/include
我們 imagelab.pro 工程在 D:\Project\Vision\ImageLab
文件夾下, 對應的庫 D:\Project\Vision\ImageLab\Depend\opencv\lib
文件夾下面, 所以, 這里 $$PWD
是 QT pro 文件的語法, 能夠獲取到 pro文件所在的目錄, 也就是工程的當前目錄,

QT 工程 需要首先執行 qmake 生成 編譯文件,
編寫代碼
QT 就是 標准的C++, 只不過 QT 是一套 C++庫, 我們能夠很容易的使用 界面庫, 生成帶有界面的程序..
- // 引入 opencv 函數頭文件
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
-
- // 設置 要顯示的圖像路徑
- std::string test_pic = "D:\\Project\\Vision\\ImageLab\\TestImages\\lena.png";
- // 讀取圖像
- cv::Mat lena_img = cv::imread(test_pic);
- // 顯示圖像
- cv::imshow("圖像顯示窗口", lena_img);
- cv::waitKey(0);
-
- return a.exec();
- }
調試運行
點擊構建, 最后點擊運行, 如果一切順利, 我們就能看到這幅圖像了, 這里圖像顯示還是 opencv 的窗口, 我們后續會將其顯示在opencv 的窗口上,

VS 導入 QT 工程
VS 有一個很好用的插件, 叫做 Qt Visual Studio Tools, 可以下載安裝,或者在 VS 工具--拓展與更新--聯機--搜索
進行安裝, 安裝之后需要重啟 VS
VS 開發 opencv 的程序 必備插件 Image Watch, 可以在調試過程中查看 內存中的 opencv Mat 數據. 強烈推薦..
點擊 設置 QT option 然后添加, 直到我們點擊到 QT安裝目錄下面 的 具體編譯器文件夾,
F:\Fxxk\QT\Qt5.14.2\5.14.2\msvc2017_64

我們使用 QT 插件導入 *.pro
文件, 會生成相應的工程,
跟我們直接 VS與 opencv 的工程設置不同, QT 自動生成的文件沒有更改 包含目錄和庫文件
而是選擇了在 附加包含目錄里面增加了, 不僅增加了 opencv 的目錄, 而且包含了 QT 的很多庫目錄,

對應的 , 我們仍然使用 附加依賴項 設置 輸入 lib 文件

這樣, 我們就能使用 VS 編譯得到 QT 的程序, 編譯成功, 運行即可再次看到 lena 圖像

其他
我們后續的開發主要是 QT 進行開發, 用於生成自定義的界面, 便於我們開發過程中的圖像展示工作.
《OpenCV: How to build applications with OpenCV inside the 〈Microsoft Visual Studio〉》. 見於 2020年4月20日. https://docs.opencv.org/4.3.0/dd/d6e/tutorial_windows_visual_studio_opencv.html. ↩