s1091707 作業2
作業說明:
線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection) 撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。(想想:如何使用邊緣偵測所得到的點,結合 成看似素描筆畫出的線條?)
執行環境:
- windows11
- Opencv 4.6.0
- Python 3.10.2
- Vscode
實作方法:
- (A)利用 Sobel Operators 偵測並輸出邊緣成分圖:
- 首先,用imread函式並指定grayscale讀入灰階圖片,並使用高斯模糊函數,模糊化圖片,因為模糊化可以平滑邊緣附近的強度變化,使更容易識別圖像中的主要邊緣結構,在此我使用kernel為3*3大小。
- 再來,用sobel函式進行梯度計算,分別給予5種參數,'來源影像', 'dx(針對x軸抓取邊緣)',dy(針對y軸抓取邊緣),ddepth 輸出影像深度,ksize 運算區域大小,對灰階照片進行偵測邊緣的轉換。在第二個參數我將輸出圖片每個像素儲存的值設為64bit,因為Sobel函數求完導數後會有負值以及大於255的值, 而原圖像大小範圍只有0~255,如不更改會有截斷, 因此要更改數據類型,
- 再用convertScaleAbs先將剛才圖像中有負數的部分做絕對值,再將64bit圖像輸出為8bit圖像,因為只有當圖像為8bit,imsohw才會按原圖像數據顯示。使用此function只需要傳入剛才計算好的圖片檔。
- 最後將對兩軸計算後的相片做合成,在此使用addWeighted函式
執行結果:
功能(a)成品圖:
留言
張貼留言