iT邦幫忙

2023 iThome 鐵人賽

DAY 5
1

一、介紹

在之前的文章中,我們已經完成了OpenCV的環境設置。現在,我們終於可以開始撰寫我們的第一個OpenCV程式。

在這個主題提供兩種建立專案的方式供你選擇。你可以根據你的開發需求和熟悉程度來決定使用哪一種方式。

無論你選擇哪種方式,都不太會影響後續的學習效果。使用CMake專案能夠將程式碼遷移到Linux環境下執行。其次,大部分的專案配置操作都可以在CMakeLists.txt文件中完成,管理專案比較方便,我比較偏好使用CMake。

你可以參考以下比較,以決定你想使用哪種專案方式。以下是兩種方式的優點和缺點:

建立新的Visual Studio的sln專案:

  • 優點: 直觀易用、集成工具方便、適合Windows開發。
  • 缺點: 依賴於特定平台(Windows)。

建立新的CMake專案:

  • 優點: 跨平台、不依賴於任何開發環境(IDE)、配置方便。
  • 缺點: 需要使用命令行操作、需要對CMake有基本的了解。

二、專案設定

1. 專案組態設定

你目前的OpenCV組態會影響你使用IDE開發選擇的組態,所以如果你的OpenCV是Debug組態,你的專案的組態就要是Debug。如果你的OpenCV是Release組態,你的專案的組態就要是Release。使用Release組態程式不能在執行的時候使用斷點(Break Point)功能,所以建議選擇Debug。千萬別拿Release版的OpenCV去連結你的Debug專案,同理,別拿Debug版的OpenCV去連結你的Release專案。不然到時候你在編譯的時候連結器會出錯,是個很大的坑。

  • 如果你是從官方預編譯的執行檔取得OpenCV的話,你可以自由選擇你要Debug還是Release組態。

  • 如果你是透過編譯來取得OpenCV的話,回到當初建立編譯環境的CMake-gui,搜尋CMAKE_BUILD_TYPE,看看你編譯出來的OpenCV是Debug組態還是Release組態,如果你很需要Break Point這個實用的功能的話建議回到上篇重新編譯一個Debug組態。

2. 建立sln解決方案 (擇一)

1) 建立新專案

  1. 啟動Visual Studio: 打開你的Visual Studio開發環境
  2. **建立新專案:**在右側的「專案範本」中,選擇「C++主控台應用程式」,按下一步。
  3. 設定你的專案名稱opencv_first_sln_project,或是其他名稱也行,但切記不要用中文。

https://ithelp.ithome.com.tw/upload/images/20230915/20161732hDaoPWFB7n.png

https://ithelp.ithome.com.tw/upload/images/20230915/20161732g6IbxqNgS1.png

2) 設定專案屬性

  1. 點選專案>opencv_first_sln_project屬性
  2. 開啟專案後,將組態更改成你安裝的OpenCV建置的組態。
  3. 移動到C/C++ > 一般,設定OpenCV的include檔資料夾,如果沒有設定你在編譯的時候#include "opencv2/opencv.hpp"會找不到標頭。
  4. 移動到連結器 > 一般,設定其他程式庫目錄,OpenCV的連結庫資料夾OpenCV\build\x64\vc17\lib
  5. 移動到連結器 > 輸入,設定OpenCV的連結庫,如果你的專案是Debug組態,填入opencv_world480d.lib。如果你是Release組態,填入opencv_world480.lib
  6. 按下確定完成設定。
  7. 將執行組態更改成你安裝的OpenCV建置的組態,如果OpenCV是用Debug組態的話,專案組態選擇Debug,反之選擇Release。

https://ithelp.ithome.com.tw/upload/images/20230915/20161732wLvhRAwSAd.png

https://ithelp.ithome.com.tw/upload/images/20230915/20161732liMDg4izVv.png

https://ithelp.ithome.com.tw/upload/images/20230915/20161732qa9jId3way.png

https://ithelp.ithome.com.tw/upload/images/20230915/20161732twIcZrAKW1.png

https://ithelp.ithome.com.tw/upload/images/20230915/20161732zvlisyMA8Y.png

2. 建立CMake專案 (擇一)

1) 建立新專案

  1. 啟動Visual Studio: 打開你的Visual Studio開發環境。
  2. 建立新專案:在右側的「專案範本」中,選擇「C++ CMake專案」,按下一步。
  3. 設定你的專案名稱,opencv_first_project,或是其他名稱也行,一樣切記不要用中文。
  4. 開啟專案後,將組態更改成你安裝的OpenCV建置組態。

https://ithelp.ithome.com.tw/upload/images/20230915/20161732Jx0o0J56Tf.png

https://ithelp.ithome.com.tw/upload/images/20230915/20161732uSMg9pwZgu.png

2) 設定專案屬性

  1. 可以看到右邊的解決方案總管裡面有opencv_first_project,將它展開以後會看到CMakeLists.txt,左鍵打開它。

  2. 更改CMakeLists.txt成下方的格式,記得OpenCV_DIR要改成你自己安裝OpenCV的位置,opencv_first_project要改成你的專案名稱。還有,如果你的專案是Release組態,需要將下方target_link_librariesopencv_world480d改成opencv_world480,否則編譯的時候連結器會出錯。

CMakeLists.txt

# 設定OpenCV 安裝位置
set(OpenCV_DIR "C:\\Users\\vince\\opencv_workspace\\build")
set(OpenCV_INCLUDE_DIRS "${OpenCV_DIR}\\include")
set(OpenCV_LIBS "${OpenCV_DIR}\\x64\\vc17\\lib")

# 設定OpenCV 的include標頭檔位置
include_directories( ${OpenCV_INCLUDE_DIRS} )
# 設定OpenCV函式庫的資料夾
link_directories("${OpenCV_LIBS}")
# 尋找OpenCV
find_package(OpenCV REQUIRED)

add_executable (opencv_first_project "opencv_first_project.cpp")

# 連結OpenCV函式庫中的opencv_world.lib
target_link_libraries(opencv_first_project opencv_world480d)

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET opencv_first_project PROPERTY CXX_STANDARD 20)
endif()

三、 程式碼

1. 寫下你的第一支OpenCV程式

接下來打開你的opencv_first_project.cpp檔,準備好寫下你的第一支OpenCV程式。

這支程式會讀取路徑下的圖片檔,透過視窗顯示出來。記得圖片的路徑必須要完整,不然會拋錯。

#include <iostream>
#include "opencv2/opencv.hpp"

int main()
{
    // 讀取圖片
    cv::Mat img = cv::imread("C:\\Users\\vince\\source\\repos\\MyFirstOpenCVProject\\x64\\Release\\Lenna.png", cv::IMREAD_UNCHANGED);

    // 顯示圖片
    cv::imshow("Output", img);

    // 等待使用者按下任意按鍵
    cv::waitKey(0);

    // 顯示訊息
    std::cout << "Hello OpenCV!\n";
}

2. 測試圖

https://ithelp.ithome.com.tw/upload/images/20230915/20161732V7ahgPZDVY.jpg

由 南加州大學訊號及圖像處理學院圖庫, Fair use, https://zh.wikipedia.org/w/index.php?curid=102343Q

3. 輸出結果

恭喜你,看到我們熟悉的Lenna圖。
https://ithelp.ithome.com.tw/upload/images/20230915/201617324T7PUROHVA.png


上一篇
【Day4】使用MinGW建置OpenCV原始碼並安裝(Windows)
下一篇
【Day6】寫出你的第一個OpenCV程式 解析圖片的組成
系列文
圖解C++影像處理與OpenCV應用:從基礎到高階,深入學習超硬核技術!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
kighar1217
iT邦新手 5 級 ‧ 2024-11-14 09:15:38

板主您好,我是剛踏入C\C++的小白,最近工作需求又額外要學習OpenCV。
因此找到版主的文章來一步一步進行。目前安裝visual studio這塊, 參考Day2-Day3文章。
今天想要測試安裝是否正確及開起第一個專案, 參考Day5文章時, 到了步驟2) 設定專案屬性: 2. 開啟專案後,將組態更改成你安裝的OpenCV建置的組態。
--> 這邊有點摸不著頭緒, 因為還是個小小白的緣故...
請問安裝的OpenCV建置的組態能在哪邊查看嗎? 我回到Day2-Day3的文章內搜索, 並沒有找到組態這個相關詞的關聯, 請版主再幫忙指點🙂
感謝版主無私分享❤️

看更多先前的回應...收起先前的回應...

kighar1217你好,回覆以上問題:
你的意思應該是要如何知道自己的OpenCV是Debug版還是Release版對吧?

這取決於你OpenCV當初建置(或編譯)的設定。

  1. 如果你是使用官方預編譯的組態(Day2),官方會提供Debug版以及Release版,你可以在OpenCV的x64\vc16\bin資料夾下發現有opencv_world480d.dll以及opencv_world480.dll,代表兩個組態都有。
  2. 如果你是使用自己編譯的方式(Day3),組態是由步驟2.2的CMAKE_BUILD_TYPE決定的。

您好, 感謝回覆
節錄上面文章:
『2) 設定專案屬性
◆ 點選專案>opencv_first_sln_project屬性
◆ 開啟專案後,將組態更改成你安裝的OpenCV建置的組態。』
所以我打開下面的位置, 順理成章地以為是在講黃色框框的地方, 以為要變更下拉式選單的內容。
依照大大的回覆, 這個步驟應該是將綠色框框處的屬性,改成安裝的版本, 請問這個理解正確嗎? 謝謝
/images/emoticon/emoticon41.gif
https://ithelp.ithome.com.tw/upload/images/20241129/20170553Gp5aSKcq1N.png

[已解決] 我依照後面的步驟繼續進行,完成設定之後,將程式碼貼入並把圖片位置改成我的資料夾位置,執行後出現找不到,請問是哪裡出了紕漏呢? 應該怎麼挽救? /images/emoticon/emoticon02.gif
https://ithelp.ithome.com.tw/upload/images/20241129/20170553YifaBVrSpm.png

沒辦法刪除留言, 我用修改方式告知:
我重新開啟專案之後,再run一次, 系統出現的錯誤顯示是找不到opencv_world480d.dll, 於是我到x64\vc16\bin位址去看, 發現檔案是opencv_world4100d.lib , 修改之後已經可以順利執行, 並顯示正確結果.
感謝大大!

/images/emoticon/emoticon12.gif

我要留言

立即登入留言