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.輸出:
3.Result 反白
沒有留言:
張貼留言