Canny算子详解及例程

Canny算子是一种经典的边缘检测算法,于1986年由John Canny提出。相比其他边缘检测算法,Canny算子具有以下特点:

  1. 高准确性:Canny算子能够对图像中真实边缘进行准确检测,并尽量排除非边缘部分的干扰。

  2. 低错误率:Canny算子在边缘检测过程中,能够尽量减少错误的边缘检测,即将噪声和细节等误判为边缘的情况。

  3. 单一响应:对于明显的边缘,Canny算子能够产生单一像素宽度的边缘响应。

Canny算子的步骤如下:

  1. 噪声抑制:利用高斯滤波器对输入图像进行平滑处理,以减少图像中的噪声。

  2. 梯度计算:通过对平滑后的图像应用Sobel(或Prewitt)算子,计算每个像素点的梯度幅值和方向。

  3. 非极大值抑制:在梯度图像上,对每个像素点在其梯度方向上进行比较,并保留局部最大值点,抑制非边缘像素。

  4. 双阈值检测:根据设定的高阈值和低阈值,将梯度图像中的像素点分为强边缘、弱边缘和非边缘三个部分。

  5. 边缘连接:通过连接强边缘像素和与之相连的弱边缘像素,形成完整的边缘。

下面是一个使用OpenCV库实现Canny算子的简单例程:

import cv2

# 读取输入图像
image = cv2.imread("input.jpg", cv2.IMREAD_GRAYSCALE)

# 使用Canny算子进行边缘检测
edges = cv2.Canny(image, 100, 200)

# 显示结果
cv2.imshow("Input Image", image)
cv2.imshow("Canny Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例程中,首先使用cv2.imread()函数读取输入图像,并将其转换为灰度图像。

然后,我们使用cv2.Canny()函数对灰度图像进行Canny边缘检测。函数的参数包括输入图像、高阈值和低阈值。这两个阈值用于控制边缘的强度,一般建议高阈值为低阈值的两倍到三倍。

最后,使用cv2.imshow()函数显示原始图像和Canny边缘检测结果。使用cv2.waitKey(0)等待用户按下任意按键后关闭窗口并结束程序。

请确保将代码中的"input.jpg"替换为您要进行边缘检测的实际图像的路径。此外,确保已安装OpenCV库并正确配置Python环境。

猜你喜欢

转载自blog.csdn.net/wangjiaweiwei/article/details/131894682
今日推荐