opencv python 8 Canny边缘检测

opencv python 8 Canny边缘检测

Canny边缘检测算法分为以下几步:

  1. 去除噪声
    边缘检测算法受噪声影响较大,所以先使用5x5的高斯滤波去除噪声。
  2. 计算图像梯度
    经过高斯平滑的图像分别在水平和垂直方向上用sober算子计算得到一阶导数Gx和Gy,以及角度θ:
  3. 非极大值抑制
    得到梯度大小和方向后扫描整张图像,移除不是边缘组成部分的像素。对每个像素,检查是否是梯度方向上邻域中的最大值。

    对于点A,检查梯度方向上的相邻点B和C,若A是最大值则进入下一步,否则置为0。
  4. 阈值处理
    对于给定的最大阈值和最小阈值,大于最大阈值的梯度必定为边缘,小于最小阈值的梯度必定不为边缘,对于中间部分,如果与必定为边缘的像素相连,则也视为边缘。

    点A必定为边缘,C在最大最小阈值之间且与A相连所以视为边缘,B不为边缘。

在opencv中使用cv2.Canny()实现该检测算法。

edges = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]])
  • edges:输出的边缘图像
  • image:输入图像
  • threshold1:第1个阈值
  • threshold2:第2个阈值,两个阈值中较小的作为最小阈值,较大的作为最大阈值
  • apertureSize:Sobel算子宽度,默认为3
  • L2gradient:是否使用L2梯度,默认为false
import cv2

img = cv2.imread('a.jpg', 0)

edges = cv2.Canny(img, 100, 200)
cv2.imshow('edges', edges)
cv2.waitKey()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值