s1072026 作業 2

作業說明

主題:線條自畫像(二值化與邊緣偵測 Image Thresholding and Edge Detection)撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)

(a)利用 Sobel Operators 偵測並輸出邊緣成分圖

(b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條?)

開發環境

  • Ubuntu 20.04.5 LTS
  • Visual Studio Code
  • OpenCV 3.4.16
  • C++

程式功能

  • 輸入圖片路徑,讀取失敗會輸出錯誤訊息
  • 利用 Sobel Operators 偵測並輸出邊緣成分圖
  • 輸出類似素描線條的自畫像圖案

實作方式

  1. 讀取圖片路徑,並用 imread 讀取圖片
  2. 將讀取的圖片轉為灰階圖
  3. 利用 Sobel 計算 x、y 方向的 kernal
  4. 再透過 convertScaleAbs、addWeighted 完成 convolution 的計算,得到邊緣成分圖 grad
  5. 利用 adaptiveThreshold 將 grad 二值化,得到線條對比較明顯的 edges
  6. 對灰階原圖與重新模糊的灰階原圖做除法,可以混合兩張圖得到顏色較淡的圖片
  7. 最後將上一步得到的圖片與對 edges 模糊化處理的圖片混合,便可以得到一張有保留細節並且有明顯線條的素描風格圖片

執行結果

原圖

RGB轉灰階圖

(a) 利用 Sobel Operators 偵測並輸出邊緣成分圖

(b) 設計一個類似素描線條的自畫像圖案。


環境設定

執行前需安裝以下套件

  • cmake
  • OpenCV 3.4.16
  • libgtk2.0-dev
  • pkg-config
  • xming
    • 執行程式時需開啟
  • x11-xserver-utils

如果在 terminal 執行 xhost + 顯示 xhost: unable to open display "",需要設定 export DISPLAY=:0.0,之後執行程式就能顯示視窗。

執行方式

執行 cmake . 產生 makefile,該 makefile 用於編譯主程式時動態連結 OpenCV 函式庫與主程式,之後便可執行編譯好的程式。

參考資料

 

留言

這個網誌中的熱門文章

s1091438 作業6

s1091429 Homework #5

s1101407 Homework #5