Canny算法由John F.Canny于1986年开发,是很常用的边缘检测算法。
它是一种多阶段算法,内部过程共4个阶段:
- 噪声抑制(通过Gaussianblur高斯模糊降噪):使用5x5高斯滤波器去除图像中的噪声
- 查找边缘的强度及方向(通过Sobel滤波器)
- 应用非最大信号抑制(Non-maximum Suppression): 完成图像的全扫描以去除可能不构成边缘的任何不需要的像素
- 高低阈值分离出二值图像(Hysteresis Thresholding)
- 高低阈值比例为T2:T1 = 3:1 / 2:1
- T2为高阈值,T1为低阈值
代码:
import cv2 as cv
src = cv.imread("head2.jpg", cv.IMREAD_GRAYSCALE)
cv.imshow("src", src)
def onChange(thres):
cv_canny = cv.Canny(src, thres, thres * 3)
cv.imshow("src_canny", cv_canny)
onChange(0)
cv.createTrackbar("thres", "src_canny", 0, 255, onChange)
cv.waitKey()
效果: