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()