OpenCV提供了一给非常方便的Canny函数(算法发明者:Jhon F.Canny)。
Canny边缘检测算法非常复杂,其实现有5个步骤:
- 使用高斯滤波器对图像进行降噪
- 计算梯度
- 在边缘上使用非最大抑制(NMS)
- 在检测到的边缘上使用双阈值去除假阳性
- 分析所有边缘及其之间的连接,保留真正的边缘,消除不明显的边缘
import cv2
#转为灰度图片
img = cv2.imread(r"F:\Python\picture\lena.jpg",cv2.IMREAD_GRAYSCALE)
#降噪
img = cv2.GaussianBlur(img,(5,5),0)
#边缘检测,50为低阈值,100为高阈值,通过调整阈值可以获得不同效果
img = cv2.Canny(img,50,100)
cv2.imshow("canny",img)
cv2.waitKey()
cv2.destroyAllWindows()
原图:
上述代码的效果图:
调整阈值为100,200后的效果:
img = cv2.Canny(img,100,200)