不知道我自己的网站的ftp账号,北京公司注册网址,六安做网站多少钱,做的网站怎么一搜就能出来文章目录 前言一、边缘检测原理二、Canny边缘检测算法三、具体应用代码 前言 在做某些图像处理时#xff0c;通常需要将识别到的物体边界提取出来#xff0c;从而帮助我们实现目标检测#xff0c;这就需要用到边缘检测#xff0c;例如人脸识别和运动目标的检测都需要先进行… 文章目录 前言一、边缘检测原理二、Canny边缘检测算法三、具体应用代码 前言 在做某些图像处理时通常需要将识别到的物体边界提取出来从而帮助我们实现目标检测这就需要用到边缘检测例如人脸识别和运动目标的检测都需要先进行边缘检测这篇文章就记录一下边缘检测的原理及应用代码。 一、边缘检测原理 边缘检测是图像处理和计算机视觉中的基本问题其目的在于标识数字图像中亮度变化明显的点图像边缘检测大幅度地减少了数据量并且剔除了可看作不相关的信息保留了图像重要的结构属性。边缘的表现形式如下图所示 常用的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()代码效果如下