Canny算法,常用且实用
image.png
image.png
image.png
image.png
image.png
def canny_edge_function(image):
'''
Canny边缘提取算法:
1、进行高斯模糊:因为Canny对噪声比较敏感,所以先高斯模糊降噪
2、灰度转移:转化为单通道
3、计算梯度:Sobel/Scharr
4、
5、高低阈值输出二值图像
'''
blurred = cv.GaussianBlur(image, (3, 3), 0)
gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)
'''
Canny算法不能用浮点数:
cv.CV_16SC1:signed 16bits
S = 有符号数;
U = 无符号数;
F = 浮点数;
'''
grad_x = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
grad_y = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
#低阈值:50;高阈值:150
edge_output = cv.Canny(grad_x,grad_y,50,150)
# edge_output = cv.Canny(gray, 50, 150) #一样的效果
cv.imshow("Canny Edge", edge_output)
image.png