OpenCV——Canny边缘检测

目录

简介

实现步骤

代码

原图

效果图


简介

Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。

实现步骤

step1:去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。

方法:图像边缘容易受到噪声的干扰,因此为了避免检测到错误的边缘信息,通常需要使用滤波去噪,平滑一些纹理弱的非边缘区域,从而得到更准确的边缘,通常使用高斯噪声。

step2:计算梯度的幅度与方向。

方法:梯度的方向与边缘总是垂直的,通常就近取值为水平(左右)、垂直(上下)、对角线(右上,左上,左下,右下)等8个不同方向。因此在计算梯度时会得到梯度的幅度和角度(代表梯度的方向)。

step3:非极大值抑制,即适当地让边缘“变瘦”。

方法:逐一遍历像素点,判断当前像素点是否是周围像素点中具有相同梯度方向的最大值,并根据判断结果决定是否抑制该点。如果该点是正/负梯度方向上的局部最大值,则保留该点。如果不是,则抑制该点(归零)。

step4:确定边缘。使用双阈值算法确定最终的边缘信息。

方法:完成上述步骤后,图像内的强边缘已经在当前获取的边缘图像内,但是一些虚边缘可能也在边缘图像内,这些虚边缘可能是真实图像产生的,也可能是由于噪声所产生的。对于后者,必须将其剔除。

设置两个阈值,其中一个为MaxVal,另外一个为低阈值minVal,根据梯度幅度,与两个阈值之间的关系,判断边缘的属性,具体步骤为:

(1)如果当前的边缘像素的梯度值大于或等于maxVal,则将当前边缘像素标记为强边缘;

(2)如果当前边缘像素的梯度值介于maxVal与minVal之间,则将当前边缘像素标记为虚边缘(需要保留);

(3)如果当前边缘像素的梯度值小于或等于minVal,则抑制当前边缘像素。

经过上述过程,获得虚边缘,此时通过判断虚边缘与强边缘是否连接,如果与强边缘连接,则将该边缘处理为边缘,如果与强边缘无连接,则该边缘为弱连接,将其抑制。

代码

import cv2

test = cv2.imread('test.jpg',cv2.IMREAD_GRAYSCALE)
r = cv2.Canny(test,128,200)
cv2.imshow('test',r)
cv2.waitKey(0)

原图

效果图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

獜洛橙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值