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 計算 xy 方向的 kernal
  4. 再透過 convertScaleAbsaddWeighted 完成 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 函式庫與主程式,之後便可執行編譯好的程式。

參考資料

 

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1