Canny邊緣檢測分為四步:
1、圖像降噪:使用高斯濾波器,平滑圖像,濾除噪聲,噪聲是灰度值變化較大的部分,容易被識別為噪聲
2、計算圖像梯度:圖像的梯度即為圖像的灰度值的變化最快的地方,梯度的模即為方向導數的最大值(將圖像看作函數),邊緣也是灰度值變化最快的地方
3、非極大值抑制:將局部范圍內的梯度方向上,灰度變化最大的保留下來,其它的不保留,這樣可以剔除掉一大部分的點。
4、應用雙閾值來確定真實和潛在的邊緣:通過非極大值抑制后,仍然有很多的可能邊緣點,進一步的設置一個雙閾值,即低閾值(low),高閾值(high)。灰度變化大於high的,設置為強邊緣像素,低於low的,剔除。在low和high之間的,如果與邊界相連則保留,否則丟棄。
圖像梯度解釋非常好的博客:https://blog.csdn.net/saltriver/article/details/78987096
img_l = cv2.Canny(img1, 50, 150) img_r = cv2.Canny(img1, 200, 300) img = np.hstack((img_l, img_r)) cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows()