s1081540 作業 2
主題:線條自畫像 (二值化與邊緣偵測 Image
Thresholding and Edge Detection)
作業說明
撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)
(a) 利用Sobel Operators 偵測並輸出邊緣成分圖
(b) 設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條?)
開發環境
- Windows 10
- OpenCV 4.2.0
- Visual Studio 2019
- C++
程式實作
- 使用 imread(path, IMREAD_GRAYSCALE) 以灰階模式讀入圖像,再使用 empty() 判斷圖片是否存在,若圖像讀取失敗會輸出錯誤訊息並結束程式。
▲ Grayscale image - (a) 產生邊緣成分圖
- Sobel() :分別計算圖像的x方向、y方向梯度
- convertScaleAbs() :分別計算圖像x方向、y方向梯度的絕對值,將圖像轉換回原來的uint8形式(CV_8U),否則將無法顯示圖像,只會顯示灰色的視窗
- addWeighted() :因為 Sobel() 是計算兩個方向的梯度,因此要使用此函數將兩個梯度以設定的權重相叠加
- imshow() :顯示目標圖像(邊緣成分圖)
- (b) 產生類似素描線條的自畫像圖案
- addWeighted() :透過255减去原始像素來進行反色操作
▲ Reverse color - GaussianBlur() :使用高斯濾波將影像模糊化並消除噪聲
▲ Reverse color + Gaussian filter - 將圖像疊加並把顏色減淡
- imshow() :顯示目標圖像(素描線條圖)
- waitKey(0) :透過使用者輸入0來中止程式
執行結果
![]() |
(a) 邊緣成分圖 |
![]() |
(b) 素描線條圖 |
▲ 程式執行過程
參考資料:
- Sobel Derivatives - OpenCV Documentation:https://docs.opencv.org/3.4/d2/d2c/tutorial_sobel_derivatives.html
- Smoothing Images - OpenCV Documentation:https://docs.opencv.org/4.x/d4/d13/tutorial_py_filtering.html
留言
張貼留言