《Opencv》Canny边缘检测操作
目录
一、简介
二、操作步骤
三、代码实例
四、代码解释
五、参数调整
六、总结
一、简介
OpenCV 是一个广泛使用的计算机视觉库,提供了许多图像处理和计算机视觉算法。Canny 边缘检测是其中一种常用的边缘检测算法,由 John F. Canny 在 1986 年提出。Canny 边缘检测算法旨在找到图像中的边缘,并且具有以下特点:
-
低错误率:尽量减少误检和漏检。
-
定位精度高:检测到的边缘点应该尽可能接近真实边缘。
-
单一边缘响应:对于每个真实的边缘点,算法应该只返回一个点。
二、操作步骤
Canny 边缘检测算法通常包括以下几个步骤:
-
高斯滤波:平滑图像以减少噪声。
-
计算梯度:使用 Sobel 算子计算图像的梯度幅值和方向。
-
非极大值抑制:在梯度方向上进行非极大值抑制,以细化边缘。
-
双阈值检测:使用高低阈值来检测和连接边缘。
-
边缘连接:通过连接强边缘和弱边缘来形成完整的边缘。
三、代码实例
OpenCV 提供了
cv2.Canny()
函数来执行 Canny 边缘检测。以下是一个详细的示例代码,展示了如何使用 OpenCV 进行 Canny 边缘检测。
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 高斯滤波
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
# Canny 边缘检测
edges = cv2.Canny(blurred_image, threshold1=100, threshold2=200)
# 显示结果
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')
plt.subplot(1, 2, 2)
plt.title('Canny Edges')
plt.imshow(edges, cmap='gray')
plt.show()
四、代码解释
-
读取图像:
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
-
cv2.imread()
:读取图像文件。 -
cv2.IMREAD_GRAYSCALE
:以灰度模式读取图像。
-
-
高斯滤波:
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
-
cv2.GaussianBlur()
:使用高斯滤波器平滑图像,减少噪声。 -
(5, 5)
:高斯核的大小。 -
0
:标准差,设为 0 表示自动计算。
-
-
Canny 边缘检测:
edges = cv2.Canny(blurred_image, threshold1=100, threshold2=200)
-
cv2.Canny()
:执行 Canny 边缘检测。 -
threshold1
和threshold2
:高低阈值,用于双阈值检测。
-
-
显示结果:
plt.figure(figsize=(10, 5)) plt.subplot(1, 2, 1) plt.title('Original Image') plt.imshow(image, cmap='gray') plt.subplot(1, 2, 2) plt.title('Canny Edges') plt.imshow(edges, cmap='gray') plt.show()
-
plt.figure()
:创建一个新的图形。 -
plt.subplot()
:创建子图。 -
plt.imshow()
:显示图像。 -
plt.show()
:显示图形。
-
五、参数调整
Canny 边缘检测的效果很大程度上取决于两个阈值参数 threshold1
和 threshold2
。通常情况下,threshold2
是 threshold1
的两倍或三倍。你可以通过调整这两个参数来获得不同的边缘检测效果。
六、总结
Canny 边缘检测是一种强大的边缘检测算法,能够有效地检测图像中的边缘。通过使用 OpenCV 的 cv2.Canny()
函数,你可以轻松地实现 Canny 边缘检测,并根据需要调整参数以获得最佳效果。