2021年3月28日 星期日

S1073348 影像處理作業 2

1.作業目的 :

線 條 自 畫 像 二值化與 邊緣偵測 應用 Extens ion of Thresholding and Edge Detection

撰寫一個程式,讀取一張

256 色灰階圖像 或 RGB 全彩圖像 (.bmp 或 .jpg 圖像格式都可)

如全彩圖像可先將圖片由 RGB 轉換至 灰階 影像 利用 Sobel Operators 圖像邊緣 為基

礎 ,設計一個類似素描線條自畫像程式。 如果可以分析邊緣偵測所得到的點,結合成

線條方式呈現更佳.


2.開發環境 :


。Windows 10。

。Spyder-4.1.5(Anaconda3)。

。Python 3.8。

。OpenCV 4.5.1。


3.實作方法:


1.輸入影像名稱

2.用 img = cv2.cvtColor(o_img,cv2.COLOR_BGR2GRAY) #把輸入的影像變成黑白

3.使用Sobel運算元,Sobel函式是一種過濾器,只是其是帶有方向的。在Python-OpenCV中,使用Sobel的運算元的函式原型如下:dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])

4.前四個parameter是必須輸入的參數,第一個位置是需要處理的影像,第二個是是影像的深度,dx 跟 dy 代表求導的階數。


x = cv2.Sobel(img,cv2.CV_16S,1,0) #以x為權重
y = cv2.Sobel(img,cv2.CV_16S,0,1) #以y為權重

absX = cv2.convertScaleAbs(x)   #轉回Unit8圖片
absY = cv2.convertScaleAbs(y)


5.   dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])
其中alpha是第一幅圖片中元素的權重(所以),beta是第二個的權重,gamma是加到最後結果上的一個值。

dst = cv2.addWeighted(absX,0.5,absY,0.5,0) #用一半的X權重和Y權重加入新的圖片 

6.用 cv2.imwrite()輸出 跟 cv2.imshow()顯示圖片

7.最後反白使用 dst = 255 - dst

4.輸出:

 1.原圖



2.Result

3.Result 反白






沒有留言:

張貼留言