Candy边缘检测的一般步骤
-
使用高斯滤波器,以平滑图像,滤除噪声。
-
计算图像中每个像素点的梯度强度和方向。
-
应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
-
应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
-
通过抑制孤立的弱边缘最终完成边缘检测。
1、高斯滤波器
2、梯度和方向
3、非极大值抑制
4、双阈值检测
下面介绍一下cv2.Candy()这个函数的常见参数的含义
cv2.Canny(src, thresh1, thresh2,edges,apertureSize,L2gradient)
src:输入原图(必须为单通道图)
thresh1:minVal
thresh2:maxVal
apertureSize:Sobel算子的大小
L2gradient:bool类型;
true: 使用更精确的L2范数进行计算(即两个方向的倒数的平方和再开放)
false:使用L1范数(直接将两个方向导数的绝对值相加)
gray=cv2.imread("lena.jpg",cv2.IMREAD_GRAYSCALE)
img=cv2.GaussianBlur(gray,(3,3),0)
v1=cv2.Canny(img,80,150)
v2=cv2.Canny(img,50,100)
res = np.hstack((v1,v2))
cv_show(res,'res')
gray=cv2.imread("car.png",cv2.IMREAD_GRAYSCALE)
img=cv2.GaussianBlur(gray,(3,3),0)
v1=cv2.Canny(img,120,250)
v2=cv2.Canny(img,50,100)
res = np.hstack((v1,v2))
cv_show(res,'res')