python canny函数_2021-02-10 Python OpenCV Canny()函数

Canny(image:,threshold1:,threshold2: Any,edges = None,apertureSize = None,L2gradient = False)函数

此函数利用Canny 算法检测一种图像的边缘。该算法在输入的图像中查找边缘并在输出中标记他们。在threshold1和threshold2中最小的值用于边缘连接。最大的值用于最可能的初始边。

参数

image:输入的图像

threshold1:浮点数double,滞后阈值的第一个阈值

threshold2:浮点数double,滞后阈值的第二个阈值

edges:输出图像,与输入图像的size相同,默认为None。

apertureSize:Sobel算子的孔径。

L2gradient:bool值。如果需要使用更高的

范数

去计算图像梯度的大小,则置L2gradient=True。否则,默认L2gradient=False,默认的

范数

Canny算法计算过程

1.利用高斯滤波器平滑图像移除噪声(在OpenCV的封装Canny算法时,并没有加入这一步,因此我们在使用前需要手动调用GussianBlur函数)

2.利用Sobel算子,计算图像的梯度。

Sobel是一种广泛应用的图像边缘检测算法,主要用于获得数字图像的一阶梯度。

Sobel通过对输入的图像的像素值做卷积运算,x方向上卷积核运算和y方向上的卷积核运算分别为:

因此,边缘的梯度和方向可表示为:

3.非极大值抑制,剔除大部分非边缘点

该方法旨在细化边缘的宽度。通过在筛选出的边缘上,将除极大值之外所有梯度值抑制为0。

4.利用双阈值法决定潜在的边缘。

如果边缘像素的梯度值高于高阈值,则将其标记为强边缘像素;如果边缘像素的梯度值小于高阈值并且大于低阈值,则将其标记为弱边缘像素;

如果边缘像素的梯度值小于低阈值,则会被抑制。

如果边缘像素的梯度值大于低阈值且小于高阈值,进一步比较:如果其领域内有强边缘像素,保留,如果没有,剔除。

推荐的高低阈值比在

之间。

测试

pic1=cv2.Canny(ori,100,500,apertureSize=3)

pic2=cv2.Canny(ori,100,250,apertureSize=3)

原图片

pic1

pic2

可知,当threshold值都较大时,都保留了较少的边缘信息。

pic1=cv2.Canny(ori,5,20,apertureSize=3)

pic2=cv2.Canny(ori,10,50,apertureSize=3)

pic1

pic2

当threshold值都较大时,都保留了较多的边缘信息。

你可能感兴趣的:(python,canny函数)