OpenCV学习记录——边缘检测

文章目录


前言

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

一、边缘检测原理

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

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

二、Canny边缘检测算法

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

(一)去除噪声

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

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

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

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

(三)非极大值抑制

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

(四)滞后阈值

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

Canny边缘检测函数如下:

python 复制代码
cv2.Canny(image, threshold1, threshold2)

其中的三个参数分别为:

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

(2)"threshold1",低阈值 "minVal"

(3)"threshold2",高阈值 "maxVal"

三、具体应用代码

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

python 复制代码
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()

代码效果如下:

相关推荐
蜗牛hb2 分钟前
VMware Workstation虚拟机网络模式
开发语言·学习·php
咸鱼桨5 分钟前
《庐山派从入门到...》PWM板载蜂鸣器
人工智能·windows·python·k230·庐山派
强哥之神16 分钟前
Nexa AI发布OmniAudio-2.6B:一款快速的音频语言模型,专为边缘部署设计
人工智能·深度学习·机器学习·语言模型·自然语言处理·音视频·openai
汤姆和杰瑞在瑞士吃糯米粑粑17 分钟前
【C++学习篇】AVL树
开发语言·c++·学习
yusaisai大鱼20 分钟前
tensorflow_probability与tensorflow版本依赖关系
人工智能·python·tensorflow
18号房客20 分钟前
一个简单的深度学习模型例程,使用Keras(基于TensorFlow)构建一个卷积神经网络(CNN)来分类MNIST手写数字数据集。
人工智能·深度学习·机器学习·生成对抗网络·语言模型·自然语言处理·tensorflow
神秘的土鸡28 分钟前
神经网络图像隐写术:用AI隐藏信息的艺术
人工智能·深度学习·神经网络
虾球xz29 分钟前
游戏引擎学习第58天
学习·游戏引擎
数据分析能量站29 分钟前
神经网络-LeNet
人工智能·深度学习·神经网络·机器学习
Jaly_W37 分钟前
用于航空发动机故障诊断的深度分层排序网络
人工智能·深度学习·故障诊断·航空发动机