形態學轉換
腐蝕
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,就會使用我們上面提到過的方程,否則使用方程:. 代替,默認值為 False。
例如:
edges = cv2.Canny(img,100,200)
參考自: 參考自:https://www.cnblogs.com/Undo-self-blog/p/8439149.html