s1091530 作業2
1. 開發環境
windows11
Python:3.8.13
opencv-python:4.7.0.72
numpy:1.24.2
2. 功能
(a)利用 Sobel Operators 偵測並輸出邊緣成分圖:
一開始先利用灰階模式讀取一張圖片,
之後使用cv2.Sobel()分別計算圖片 x方向和y方向的梯度,會得到sobelx和sobely。
再來會用到cv2.convertScaleAbs()來做傳換,分別帶入sobelx和sobely,會得到abs_sobelx和abs_sobely,
因為使用cv2.Sobel()會產生出負值,而我們只關心邊緣的存在及方向,不需關心梯度的正負,因此透過取絕對值可以保留邊緣的訊息。
還有因為OpenCV是使用浮點數型別,而在顯示圖像時,需要用到的則是整數型別,這樣才能顯示出來,所以我們必須轉換,並且將像素值縮放到0~255的範圍內。
最後,使用cv2.addWeighted(),將x方向和y方向的梯度合併,就能得到邊緣偵測的結果。
(b)設計一個類似素描線條的自畫像圖案:
一開始先使用cv2.bitwise_not()將黑白交換,形成素描的效果。之後再透過膨脹的方式將白色的部分擴大,能夠弱化粗線條,會先建立kernel(作為膨脹操作的結構元素),再將它加入到cv2.dilate()裡面,使它膨脹來增強連接、填充凹痕。
結果:
留言
張貼留言