您好,登錄后才能下訂單哦!
這篇“python的Sobel算子怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python的Sobel算子怎么使用”文章吧。
說明
1、Sobel算子根據像素點的上下、左右相鄰點的灰度加權差,在邊緣達到極值的現象來檢測邊緣。
它具有平滑的噪聲功能,并提供更準確的邊緣方向信息。由于Sobel算子結合了高斯平滑度和微分求導(分化),因此結果會更具抗噪性,當對精度要求不高時,Sobel算子是一種常用的邊緣檢測方法。
2、Sobel算子仍然是過濾器,但它有方向。
dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
實例
# coding=utf-8 import cv2 import numpy as np img = cv2.imread("D:/test/26.png", 0) ''' 在Sobel函數的第二個參數這里使用了cv2.CV_16S。 因為OpenCV文檔中對Sobel算子的介紹中有這么一句: “in the case of 8-bit input images it will result in truncated derivatives”。 即Sobel函數求完導數后會有負值,還有會大于255的值。 而原圖像是uint8,即8位無符號數,所以Sobel建立的圖像位數不夠,會有截斷。 因此要使用16位有符號的數據類型,即cv2.CV_16S。 在經過處理后,別忘了用convertScaleAbs()函數將其轉回原來的uint8形式。 否則將無法顯示圖像,而只是一副灰色的窗口。convertScaleAbs()的原型為: dst = cv2.convertScaleAbs(src[, dst[, alpha[, beta]]]) 其中可選參數alpha是伸縮系數,beta是加到結果上的一個值。結果返回uint8類型的圖片。 由于Sobel算子是在兩個方向計算的,最后還需要用cv2.addWeighted(...)函數將其組合起來。 其函數原型為: dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) 其中alpha是第一幅圖片中元素的權重,beta是第二個的權重,gamma是加到最后結果上的一個值。 ''' x = cv2.Sobel(img, cv2.CV_16S, 1, 0) y = cv2.Sobel(img, cv2.CV_16S, 0, 1) absX = cv2.convertScaleAbs(x)# 轉回uint8 absY = cv2.convertScaleAbs(y) dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0) cv2.imshow("orign", img) cv2.imshow("absX", absX) cv2.imshow("absY", absY) cv2.imshow("Result", dst) cv2.waitKey(0) cv2.destroyAllWindows()
以上就是關于“python的Sobel算子怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。