Python 中的 OpenCV Canny
我们使用 opencv 库处理人工智能、机器学习和更多技术中计算机视觉的图像和图形。 我们可以使用这个库中的功能来有效地读取和处理图像。
本篇文章将介绍 Python 中的 cv2.canny() 函数。
在 Python 中使用 cv2.canny() 函数
cv2.canny()
函数实现了由 John F. Canny 开发的 Canny 边缘检测算法。 我们可以使用这个函数来检测给定图像的边缘。
该算法本身有多个阶段。
- 第一阶段涉及降噪,为此,该算法使用 5x5 高斯滤波器。
- 下一阶段涉及找到给定图像的强度梯度。 在这个阶段,图像被平滑,然后被传递到 Sobel 内核,在那里它沿着 x 和 y 轴被过滤,并为每个轴找到它的梯度。
- 在第三阶段,每个像素都用梯度方向的局部最大值进行检查,以去除不形成边缘的不需要的像素。
-
最后阶段是对边缘进行分类的阶段。 取两个阈值,minVal 和 maxVal。
梯度值大于 maxVal 的边是边,小于 minVal 的不是边。 这些阈值的其余部分根据它们的连接性进行分类。
以上所有阶段均由 cv2.canny()
函数实现。 在确定此功能的参数时,有必要了解这些阶段。
在下面的示例中,我们将检测图像的边缘。
import cv2
img = cv2.imread('jiyik.png')
e = cv2.Canny(img, threshold1 = 50, threshold2 = 100)
cv2.imshow('Edges Detected',e)
cv2.waitKey(0)
cv2.destroyAllWindows()
在上面的示例中,我们使用 cv2.imread()
函数读取图像。 使用 cv2.canny()
函数检测此图像的边缘。
注意函数 threshold1 和 threshold2 中的两个参数。 这两个参数是前面讨论的 minVal 和 maxVal 阈值频率的值。
必须提供这两个值。
在对给定图像的边缘进行分类后,我们使用 cv2.imshow()
函数将其显示在新窗口中。 示例中使用了 cv2.waitkey(0)
函数来防止解释器自动关闭创建的窗口并等待用户按下某个键。
cv2.destroyAllWindows()
函数关闭所有窗口。
cv2.canny()
函数还接受两个额外的可选参数,称为 apertureSize 和 L2gradient。 apertureSize 参数指定 Sobel 内核的孔径大小。
默认情况下,它的值为三,可以取三到五之间的任何奇数。 我们可以增加 apertureSize 以从图像中获取更多特征。
L2gradient 采用 True 或 False 值,默认为 False。
如果我们指定L2gradient参数为True,则使用新的L2Gradient算法计算梯度值; 否则,使用传统方程。 新算法往往更准确一些。
总结
我们在本教程中讨论了如何使用 cv2.canny() 函数。 我们讨论了 Canny 边缘检测算法以及该函数如何在内部实现它。
该功能已通过示例进行了演示。 我们还讨论了这个函数的参数。
有些是强制性的,threshold1 和 threshold2,而另一些是可选的,apertureSize 和 L2gradient。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串