淘客网站模版,汕头网站推广系统,三亚8名男女深夜被抓,物流 网站 模板提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 一、梯度的概念二、梯度的应用三、梯度如何实现 一、梯度的概念
形态学梯度#xff08;Morphological Gradient#xff09;是数字图像处理中的一种基本操作… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 一、梯度的概念二、梯度的应用三、梯度如何实现 一、梯度的概念
形态学梯度Morphological Gradient是数字图像处理中的一种基本操作用于检测图像中的边缘和轮廓。它结合了形态学膨胀Dilation和形态学腐蚀Erosion两种基本操作的结果从而得到一个图像的边缘信息。 二、梯度的应用
现在有个问题请大家想一下上面我们提到了梯度可以得到图像的边缘信息那我们通过前几节的课程想一下 梯度是如何实现的 例如我现在有个圆我如何得到圆的边缘 我如果把这个圆给膨胀一下这个圆就变大了一圈我再给腐蚀一下圆又变小了如果拿膨胀减去腐蚀的 不就是边缘了吗。 那有人可能又问了膨胀过后减去原图不也能得到边缘吗为什么还要在腐蚀一下在减呢
其实膨胀减去原图也能得到边缘但是这和膨胀减去腐蚀是有差距的 当我们将膨胀操作的结果减去原始图像时实际上得到的是原始图像中比周围更亮的区域。这是因为膨胀操作会扩大图像中较亮的区域而减去原始图像后差异部分就是原始图像中相对较亮的区域。因此这样的操作会突出原始图像中的亮部分而不是物体的边缘。 对于检测边缘我们需要考虑的是图像中亮暗交界处的变化而不仅仅是图像中较亮的区域。形态学梯度通过膨胀和腐蚀操作的差异来捕获这种变化因为它考虑了物体与背景之间的差异即使在较暗的物体周围也能有效地检测到边缘。 因此直接将膨胀操作的结果减去原始图像并不适合用于突出图像的边缘信息而形态学梯度通过膨胀减去腐蚀来更准确地实现这一目的。
三、梯度如何实现
import cv2
import numpy as np# 读取图像
image cv2.imread(yunfeng.jpg, cv2.IMREAD_GRAYSCALE)# 定义结构元素
kernel np.ones((5,5), np.uint8)# 膨胀操作
dilated cv2.dilate(image, kernel, iterations1)# 腐蚀操作
eroded cv2.erode(image, kernel, iterations1)# 形态学梯度
gradient cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)# 显示原始图像、膨胀结果、腐蚀结果和形态学梯度结果
cv2.imshow(Original 、, image)
cv2.imshow(Dilated , dilated)
cv2.imshow(Eroded , eroded)
cv2.imshow(Morphological, gradient)cv2.waitKey(0)
cv2.destroyAllWindows()
上面代码对图像腐蚀和膨胀是为了看对比效果实际上梯度是通过morphologyEx MORPH_GRADIENT这个参数实现的。 我们看下最终效果