s1093304 作業2
一、作業說明
主題: 線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection)
撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)
(a)利用 Sobel Operators 偵測並輸出邊緣成分圖
(b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合成看似素描筆畫出的線條?)
圖一、本次作業讀取的圖片
二、開發環境
- Windows 10
- Visual Studio Code 1.76.1
- Python 3.9.15
- OpenCV 4.6.0
三、實作過程
- 首先使用cv2.imread('./fig.jpg', cv2.IMREAD_GRAYSCALE),以灰階方式讀取圖像。
- (a) 利用 Sobel Operators 偵測並輸出邊緣成分圖:
- 如下圖三,使用cv2.Sobel()對img圖像進行邊緣檢測,輸出的影像深度為16位元的有符號整數,分別在x和y軸方向計算梯度,Sobel算子的核大小為3*3。
- 使用cv2.convertScaleAbs()分別將sobel_x和sobel_y轉成8位元的絕對值影像
- 接著使用cv2.addWeighted()將已轉成絕對值的sobel_x和sobel_y各自加權0.5後疊加,即可得到邊緣成分圖(sobel_pic)。
- (b)設計一個類似素描線條的自畫像圖案:
- 使用cv2.GaussianBlur()對sobel_pic進行模糊化處理,使用大小為3*3的高斯濾波器。
- 對經過模糊化處理的圖片透過cv2.threshold()進行二值化處理,得到threshold_pic
- 藉由255 - sobel_pic和255 - threshold_pic得到sobel_pic和threshold_pic的反色圖
- 最後再透過cv2.addWeighted()將sobel_pic和threshold_pic的反色圖各自加權0.5後疊加,即可獲得一個類似素描線條的自畫像圖案。
留言
張貼留言