OpenCV常用基本處理函數(6)圖像梯度


形態學轉換

腐蝕

img = cv2.imread('j.png',0)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)

膨脹

dilation = cv2.dilate(img,kernel,iterations = 1)

先進性腐蝕再進行膨脹就叫做開運算。就像我們上面介紹的那樣,它被用來去除噪聲。這里我們用到的函數是 cv2.morphologyEx()。

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

 

圖像梯度

梯度簡單來說就是求導,對於像素點的分布曲線求導,然后在像素變化較大的地方即為邊緣,通過求導可以求出邊緣的位置。

OpenCV 提供了三種不同的梯度濾波器,或者說高通濾波器:Sobel,Scharr 和 Laplacian

Sobel,Scharr 其實就是求一階或二階導數。Scharr 是對 Sobel(使用小的卷積核求解求解梯度角度時)的優化。Laplacian 是求二階導數。

laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)

效果如圖:

Candy邊緣檢測

1.去除噪聲,高斯核

2.計算梯度

3.進行運算

4.非極大值抑制

5.設置兩個閾值(圖像的灰度梯度高於 maxVal 時被認為是真的邊界,那些低於 minVal 的邊界會被拋棄。如果介於兩者之間的話,就要看這個點是否與某個被確定為真正的邊界點相連,如果是就認為它也是邊界點,如果不是就拋棄)

在OpenCV中通過cv2.Canny()來進行,這個函數的第一個參數是輸入圖像。第二和第三個分別是 minVal 和 maxVal。第三個參數設置用來計算圖像梯度的 Sobel卷積核的大小,默認值為 3。最后一個參數是 L2gradient,它可以用來設定求梯度大小的方程。如果設為 True,就會使用我們上面提到過的方程,否則使用方程:Edge\_Gradient \; (G) = |G_x| + |G_y|. 代替,默認值為 False。

例如:

edges = cv2.Canny(img,100,200)


參考自: 參考自:https://www.cnblogs.com/Undo-self-blog/p/8439149.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM