您的位置:首页 > 教育 > 锐评 > 公司管理系统包括_web服务器官网_南京高端品牌网站建设_搜索引擎营销的优势和劣势

公司管理系统包括_web服务器官网_南京高端品牌网站建设_搜索引擎营销的优势和劣势

2025/4/16 6:58:58 来源:https://blog.csdn.net/zdx2585503940/article/details/147155230  浏览:    关键词:公司管理系统包括_web服务器官网_南京高端品牌网站建设_搜索引擎营销的优势和劣势
公司管理系统包括_web服务器官网_南京高端品牌网站建设_搜索引擎营销的优势和劣势

文章目录

  • 一、什么是图像形态学?
  • 二、基本概念:结构元素
  • 三、基本形态学操作
    • 1. 腐蚀(Erosion)
    • 2. 膨胀(Dilation)
    • 3. 开运算(Opening)
    • 4. 闭运算(Closing)
  • 四、高级形态学操作
    • 1. 形态学梯度
    • 2. 顶帽(Top Hat)与黑帽(Black Hat)
  • 五、总结

一、什么是图像形态学?

图像形态学(Image Morphology)是数字图像处理领域的一个重要分支,主要研究基于形状的图像处理技术。它最初源于对生物体形态的研究,后来被引入到图像分析中,成为提取图像中有用形状特征的有效工具。

在OpenCV中,形态学操作主要基于二值图像(黑白图像)进行处理,通过结构元素(kernel)与图像进行特定操作来实现各种效果,广泛应用于边缘检测、噪声去除、形状分析等领域。

二、基本概念:结构元素

结构元素(Structuring Element)是形态学操作的核心,它决定了操作的邻域形状和大小。可以把它想象成一个小的矩阵或模板,在图像上滑动并进行比较。

import cv2
import numpy as np# 创建矩形结构元素
kernel_rect = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
# 创建椭圆形结构元素
kernel_ellipse = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
# 创建十字形结构元素
kernel_cross = cv2.getStructuringElement(cv2.MORPH_CROSS, (5,5))print("矩形结构元素:\n", kernel_rect)
print("椭圆形结构元素:\n", kernel_ellipse)
print("十字形结构元素:\n", kernel_cross)

三、基本形态学操作

1. 腐蚀(Erosion)

腐蚀操作可以看作是将图像"收缩"或"细化"的过程。它会侵蚀掉物体的边界,使物体变小。

原理:结构元素在图像上滑动,只有当结构元素完全覆盖前景像素时,中心像素才保留为前景,否则变为背景

  • 图像腐蚀, 函数为:
cv2.erode(src, kernel, dst,anchor,iterations,borderType,borderValue)
src: 输入的图像
kernel: 用于腐蚀的结构元件如果element = Mat(),则使用3 × 3的矩形结构单元。
dst: 它是与src相同大小和类型的输出图像。
iterations:腐蚀操作的迭代次数,默认为1。次数越多, 腐蚀操作执行的次数越多,腐蚀效果越明显

下面我们以一张太阳的图片来进行腐蚀:

import cv2
import numpy as  np
sun = cv2.imread('sun.png')
cv2.imshow('src',sun)
cv2.waitKey(0)
kernel = np.ones((3,3),np.uint8) #设置kernel大小
erosion_1 = cv2.erode(sun,kernel,iterations=2)
cv2.imshow('erosion_1',erosion_1)
cv2.waitKey(0)

左图是原图,右边为腐蚀后的图片:
在这里插入图片描述

应用场景

  • 去除小的白噪声
  • 分离相连的物体
  • 消除细小的突出物

2. 膨胀(Dilation)

膨胀是腐蚀的对偶操作,可以看作是将图像"扩张"或"变粗"的过程。

原理:结构元素在图像上滑动,只要结构元素与前景像素有重叠,中心像素就设置为前景。

  • 图像腐蚀, 函数为:
cv2.dilate(img, kernel, iteration)
参数含义:
img – 目标图片
kernel – 进行操作的内核,默认为3×3的矩阵
iterations – 膨胀次数,默认为1
# 膨胀操作
dilated = cv2.dilate(binary, kernel_rect, iterations=1)cv2.imshow('Original', binary)
cv2.imshow('Dilated', dilated)
cv2.waitKey(0)
cv2.destroyAllWindows()

左图是原图,右边为膨胀后的图片:
在这里插入图片描述

应用场景

  • 填补物体中的空洞
  • 连接相邻的物体
  • 增加物体尺寸

3. 开运算(Opening)

开运算是先腐蚀后膨胀的过程。
作用:平滑物体的轮廓、断开较窄的狭颈并消除细的突出物。

下面以一张指纹图片,进行开运算操作

import cv2
import numpy as  np
zhiwen = cv2.imread('zhiwen.png')
cv2.imshow('src2',zhiwen)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)
zhiwen_new = cv2.morphologyEx(zhiwen,cv2.MORPH_OPEN,kernel)
cv2.imshow('zhiwen_new',zhiwen_new)
cv2.waitKey(0)
  • 运行结果如下:

在这里插入图片描述

特点

  • 消除小的前景区域(噪声)
  • 平滑物体轮廓但不明显改变面积
  • 断开狭窄的连接

4. 闭运算(Closing)

闭运算是先膨胀后腐蚀的过程。
作用:弥合较窄的间断和细长的沟壑,清除小的孔洞,填补轮廓线中的断裂

zhiwen = cv2.imread('zhiwen_duan.png')
cv2.imshow('src3',zhiwen)
cv2.waitKey(0)
kernel = np.ones((5,5),np.uint8)
zhiwen_new = cv2.morphologyEx(zhiwen,cv2.MORPH_CLOSE,kernel)
cv2.imshow('zhiwen_new1',zhiwen_new)
cv2.waitKey(0)
  • 运行结果如下:
    在这里插入图片描述
    特点
  • 填补前景区域中的小孔
  • 连接邻近物体
  • 平滑轮廓但不明显改变面积

四、高级形态学操作

1. 形态学梯度

形态学梯度是膨胀图与腐蚀图之差,可以得到物体的轮廓。
作用:突出显示图像中强度变化剧烈的地方

import cv2
import numpy as  np
wenzi = cv2.imread('wenzi.png')
cv2.imshow('wenzi_new',wenzi)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)
#膨胀-腐蚀
bianyuan = cv2.morphologyEx(wenzi,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('bianyuan',bianyuan)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 运行结果如下:

在这里插入图片描述

应用:边缘检测、轮廓提取

2. 顶帽(Top Hat)与黑帽(Black Hat)

顶帽是原图像与开运算结果之差,黑帽是闭运算结果与原图像之差。

import cv2
import numpy as  np
# # 顶帽 = 原始图像 - 开运算结果(先腐蚀后膨胀)
# # 黑帽 = 闭运算(先膨胀后腐蚀) - 原始图像
sun = cv2.imread('sun.png')
cv2.imshow('sun_yuantu',sun)
cv2.waitKey(0)
kernel = np.ones((2,2),np.uint8)#顶帽
tophat = cv2.morphologyEx(sun,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('TOPHAT',tophat)
cv2.waitKey(0)#黑帽
blackhat = cv2.morphologyEx(sun,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('BLACKHAT',blackhat)
cv2.waitKey(0)
  • 运行结果如下

在这里插入图片描述

应用

  • 顶帽:突出比邻近区域亮的微小物体
  • 黑帽:突出比邻近区域暗的微小物体

五、总结

OpenCV中的形态学操作是图像处理中极为强大的工具,通过合理组合基本操作可以解决许多实际问题。关键点包括:

  1. 理解结构元素对结果的影响
  2. 掌握腐蚀、膨胀、开运算、闭运算等基本操作
  3. 学会根据实际问题选择适当的操作组合
  4. 通过调整迭代次数和结构元素大小优化效果

形态学操作虽然简单,但在实际应用中往往能发挥意想不到的效果,大家一定要多去练习并且在这些运行结果种发现各个操作的区别。
代码的学习就是多练,多看,多思考,相信大家坚持下去一定会成功的,希望这篇文章能帮助到您!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com