opencv-python库 cv2.Canny()边缘检测

文章目录

介绍

Canny边缘检测是一种经典的边缘检测算法,由John F. Canny在1986年提出,被广泛应用于计算机视觉和图像处理领域2。

Canny边缘检测的主要步骤如下1:

  • 噪声抑制。首先,通过使用高斯滤波器对图像进行平滑处理,以去除图像中的噪声。
  • 计算梯度幅值和方向。使用Sobel算子计算图像中每个像素点的水平和垂直方向的梯度值。然后,根据梯度值计算每个像素点的梯度幅值和方向。
  • 非极大值抑制。在计算得到的梯度幅值图像上进行非极大值抑制,将边缘宽度变窄,使边缘更加细化和明确。
  • 双阈值处理。根据设定的高阈值和低阈值,将梯度幅值图像中的像素点分为强边缘、弱边缘和非边缘三类。
  • 边缘连接。通过连接强边缘像素点和与之相邻的弱边缘像素点,得到完整的边缘图像。

cv2.Canny()

cv2.Canny() 是 OpenCV(一个开源的计算机视觉库)中用于执行 Canny 边缘检测的函数。这个函数的基本语法如下:

edges = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient[, borderType]]]])

参数说明:

  • image:输入图像,通常应该是灰度图像。
  • threshold1:第一个阈值,用于边缘连接。通常设置为较低的值。
  • threshold2:第二个阈值,用于梯度强度的判断。通常设置为较高的值。
  • edges:输出边缘图像,是一个与输入图像大小和类型相同的图像。
  • apertureSize:Sobel 算子的大小,必须是奇数,并且可以是 3, 5, 7 等。默认值为 3。
  • L2gradient:一个布尔值,表示是否使用更精确的 L2 范数来计算图像梯度幅值。默认为 False。
  • borderType:像素外插法,用于处理图像边界像素。默认值为 cv2.BORDER_DEFAULT。

threshold1 和 threshold2 是 Canny 边缘检测算法中的两个关键参数。当某个像素点的梯度强度低于 threshold1 时,该像素点被认为是非边缘;当梯度强度高于 threshold2 时,该像素点被认为是边缘;当梯度强度在 threshold1 和 threshold2 之间时,如果它连接到一个“确定的边缘”(即梯度强度大于 threshold2 的像素点),则它也被认为是边缘。

下面是一个使用 cv2.Canny() 的简单示例:

import cv2
import numpy as np

# 读取图像并转换为灰度图
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 应用 Canny 边缘检测
edges = cv2.Canny(image, threshold1=30, threshold2=100)

# 显示原始图像和边缘检测后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个示例中,我们首先读取一个图像文件并将其转换为灰度图。然后,我们使用 cv2.Canny() 函数对灰度图像执行 Canny 边缘检测,并显示原始图像和检测到的边缘。通过调整 threshold1 和 threshold2 的值,你可以控制检测到的边缘的数量和清晰度。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫Devin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值