Canny边缘检测(opencv_python学习)

Canny Edge Detection算法原理

Canny边缘检测是一个多阶段的算法,包括以下几个步骤:

  1. 噪声抑制:使用高斯滤波器对输入图像进行平滑处理,以降低噪声对边缘检测的影响。高斯滤波可以有效地去除图像中的高频噪声。

  2. 计算梯度:使用Sobel算子计算图像的水平和垂直方向上的梯度。这一步旨在捕捉图像中的边缘信息。通过计算梯度的幅值和方向,可以确定图像中的边缘位置和边缘的方向。

  3. 非极大值抑制:在梯度图像上执行非极大值抑制,目的是细化边缘以获得更准确的结果。该步骤会检查每个像素点周围的邻域,判断当前像素是否为沿着梯度方向的局部最大值,如果是,则保留该像素作为边缘点,否则将其抑制。

  4. 双阈值处理:使用两个阈值(高阈值和低阈值)来确定哪些边缘属于真正的边缘。高阈值用于初始的边缘选取,低阈值用于连接被高阈值选取的边缘上的弱边缘。如果一个边缘像素的梯度值大于高阈值,则视为强边缘;如果梯度值处于高阈值和低阈值之间,则仅在其周围有强边缘时才被视为边缘,否则被认为是噪声。

  5. 边缘跟踪:根据双阈值处理后的结果,通过连接强边缘像素,形成完整的边缘线条。

cv.Canny()函数

Canny边缘检测是一种经典的边缘检测算法,它可以有效地检测图像中的边缘。在OpenCV中,可以使用cv.Canny()函数来实现Canny边缘检测。

cv.Canny()函数的语法如下:

edges = cv.Canny(image, threshold1, threshold2, apertureSize=3, L2gradient=False)

参数解释:

  • image:要进行边缘检测的输入图像,必须为单通道灰度图像。
  • threshold1:边缘检测中的低阈值,用于边缘强度的下界。
  • threshold2:边缘检测中的高阈值,用于边缘强度的上界。
  • apertureSize:Sobel算子的孔径大小,默认为3。
  • L2gradient:一个布尔值,指定计算梯度幅值的方法。如果设置为True,使用更精确但稍慢的L2范数;如果设置为False,使用默认的L1范数。默认为False。

函数返回一个包含边缘信息的二值图像,其中白色表示边缘,黑色表示非边缘。

import cv2 as cv

# 读取图像
image = cv.imread('image.jpg', cv.IMREAD_GRAYSCALE)

# 应用Canny边缘检测
edges = cv.Canny(image, 100, 200)

# 显示结果
cv.imshow('Canny Edge Detection', edges)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蜡笔小新配吉良吉影

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

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

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

打赏作者

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

抵扣说明:

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

余额充值