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 偵測並輸出邊緣成分圖
- 輸出類似素描線條的自畫像圖案
實作方式
- 讀取圖片路徑,並用 imread 讀取圖片
- 將讀取的圖片轉為灰階圖
- 利用 Sobel 計算 x、y
方向的 kernal
- 再透過 convertScaleAbs、addWeighted 完成 convolution 的計算,得到邊緣成分圖 grad
- 利用 adaptiveThreshold 將 grad 二值化,得到線條對比較明顯的
edges
- 對灰階原圖與重新模糊的灰階原圖做除法,可以混合兩張圖得到顏色較淡的圖片
- 最後將上一步得到的圖片與對 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 函式庫與主程式,之後便可執行編譯好的程式。
參考資料
留言
張貼留言