OpenCV学习记录——边缘检测


前言

        在做某些图像处理时,通常需要将识别到的物体边界提取出来,从而帮助我们实现目标检测,这就需要用到边缘检测,例如人脸识别和运动目标的检测都需要先进行边缘检测,这篇文章就记录一下边缘检测的原理及应用代码。

一、边缘检测原理

        边缘检测是图像处理和计算机视觉中的基本问题,其目的在于标识数字图像中亮度变化明显的点,图像边缘检测大幅度地减少了数据量,并且剔除了可看作不相关的信息保留了图像重要的结构属性。边缘的表现形式如下图所示:

        常用的Canny边缘检测算法实际上是通过寻找图像一阶导数中的最大值和最小值来检测边界,通常是将边界定位在梯度最大的方向。

二、Canny边缘检测算法

        Canny 边缘检测算法是一种非常流行的边缘检测算法,是 John F.Canny 于 1986 年提出的,被认为是最优的边缘检测算法。它可分为4个步骤:去除噪声、计算图像梯度、非极大值抑制和滞后阈值。

(一)去除噪声

        边缘检测极易受到噪声影响,因此需要使用高斯滤波器去除噪声,具体方法可以查看本专栏的前一篇文章,下图是去除噪声和没去除噪声的边缘检测对比:

        显然第三张未去除噪声的边缘检测不够清晰,非常混乱,不方便进行识别

(二)计算图像梯度幅值与方向

        图像中用梯度表示灰度值变化程度与方向,而边缘就是指灰度强度变化最强的位置。 梯度方向与边缘方向呈垂直关系,具体的计算方法在这里就不做记录了。

(三)非极大值抑制

        非极大值抑制,即保留局部最大值,抑制非局部最大值的所有值。简单而言,就是对图像的所有像素点进行检测,如果某点的梯度强度大于其梯度方向的正负方向的像素点,则该点保留;否则,该点被抑制。Canny 边缘检测算法是沿着梯度方向对幅值进行非极大值抑制的,而非边缘方向。

(四)滞后阈值

        为了确定真正的边界,需要设定两个阈值 “minVal”“maxVal” 。 当图像某点的灰度梯度大于阈值 “maxVal” ,该点被视为真的边界点;当某点的灰度梯度小于阈值“minVal”,则该点不看作边界点;当某点的灰度梯度介于两个阈值之间,根据该点是否与真的边界点相连来进行判断,相 连则将该点也看作边界点,否则将其抛弃。

Canny边缘检测函数如下:

cv2.Canny(image, threshold1, threshold2)

其中的三个参数分别为:

(1)“image”, 进行边缘检测的图像

(2)“threshold1”,低阈值 “minVal”

(3)“threshold2”, 高阈值 “maxVal”

三、具体应用代码

进行Canny边缘检测的具体应用代码如下:

import cv2

# 图像读取
img = cv2.imread('KAI.jpg')

# Canny边缘检测
minVal = 1       # 设置低阈值
maxVal = 80      # 设置高阈值
blur = cv2.GaussianBlur(img, (5, 5), 1)    # 进行高斯滤波
canny = cv2.Canny(blur, minVal, maxVal)    # 进行边缘检测

# 图像展示
cv2.imshow('edge', canny)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码效果如下:

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
边缘检测是图像处理中的一项重要任务,用于检测图像中的边缘或轮廓。在OpenCV中,提供了几种边缘检测算法,其中包括Sobel、Scharr和Canny等。 Sobel和Scharr是两种常用的梯度滤波器,用于计算图像的梯度。它们可以通过cv.Sobel()和cv.Scharr()函数来实现。这两个函数的参数包括原图像、图像深度、x轴和y轴方向的算子以及内核大小。其中,图像深度一般可以写作-1,表示与原图像相同的深度。算子可以选择Sobel或Scharr,内核大小用于指定滤波器的大小。 另外,OpenCV还提供了Canny边缘检测算法,可以通过cv.Canny()函数来实现。Canny边缘检测是一种多阶段的算法,它首先使用高斯滤波器对图像进行平滑处理,然后计算图像的梯度,接着进行非最大抑制,最后通过阈值处理来提取边缘。 综上所述,OpenCV中的边缘检测可以通过Sobel、Scharr和Canny等函数来实现。这些函数可以根据需要选择不同的参数来进行边缘检测操作。 #### 引用[.reference_title] - *1* *2* *3* [OpenCV中的图像处理 —— 图像梯度+Canny边缘检测+图像金字塔](https://blog.csdn.net/qq_50587771/article/details/123680995)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

KAIs32

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

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

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

打赏作者

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

抵扣说明:

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

余额充值