作業說明:
線條自畫像
(二值化與邊緣偵測應用Extension
of Thresholding and Edge Detection)
撰寫一個程式,讀取一張256色灰階圖像或RGB全彩圖像(.bmp或.jpg圖像格式都可,如全彩圖像可先將圖片由RGB轉換至灰階影像),利用Sobel Operators圖像邊緣為基礎,設計一個類似素描線條自畫像程式。(如果可以分析邊緣偵測所得到的點,結合成線條方式呈現更佳!)
操作環境:
l 作業系統 : Windows10
l 編譯軟體 : Visual Studio Code
l 使用語言 : Python / OpenCV 4.5.1
實作方法:
1. 運用OpenCV提供之讀取圖片檔函數cv2.imread將圖片讀取進來。
2. 將原本的影像轉為灰階影像再做邊緣偵測。
3. 以Sobel Edge Detection分成vertical和horizontal兩種方式取值。
l 將每個pixel值的取法是以該pixel為中心點,向外推出去九宮格範圍的pixel來做運算取得該pixel的值。
l vertical是把九宮格內的每個pixel乘上相對應的九宮格vertical sobel mask後加總成為該pixel的新值,以算出垂直梯度Gx的邊緣偵測。
l horizontal是把九宮格內的每個pixel乘上相對應的九宮horizontal sobel mask後加總成為該pixel的新值,以算出水平梯度Gy的邊緣偵測。
l 通過cv2.Sobel()計算出X,Y方向的梯度大小
4. 邊緣偵測所得到的點,進行顏色反轉。讀取每個圖元值P,再將255-P寫入新的圖片中;對於灰度圖,只有一個通道,所以 img2[i,j] = (255-image[i,j]) ;對於彩色圖片,則要RGB值分別做處理,255-image[i,j][0],255-image[i,j][1],255-image[i,j][2]。
5. 設定threshold讓圖片二值化,讓線條明顯呈現以達成類似素描效果。
6. 使用 OpenCV 所提供的 cv2.imshow 來顯示原圖、灰階、Sobel 以x方向處理、Sobel 以y方向處理、Sobel x跟y方向combine以及顏色反轉,最後將影像二值化呈現類似素描結果。
執行結果:
原圖:
轉為灰階:
Sobel 以x方向處理:
Sobel 以y方向處理:
Sobel x跟y方向combine:
顏色反轉,呈現黑線條:
設定threshold讓圖片二值化,達成類似素描效果:
沒有留言:
張貼留言