《OpenCV计算机视觉》—— 图像形态学(腐蚀、膨胀等)

文章目录

  • 一、图像形态学基本概念
  • 二、基本运算
    • 1.简单介绍
    • 2.代码实现
  • 三、高级运算
    • 1.简单介绍
    • 2.代码实现

一、图像形态学基本概念

  • 图像形态学是图像处理科学的一个独立分支,它基于集合论和数学形态学的理论,专门用于分析和处理图像中的形状和结构
  • 图像形态学处理主要关注的是二值图像(黑白图像或是灰度图),其基本思想是用具有一定形态特征的结构元素去量度和提取图像中的对应形状,以实现图像分析和识别的目的。与传统的基于线性理论的空域或频域图像处理技术相比,图像形态学具有不模糊图像边界和细节、对噪声不敏感、提取的图像边缘平滑、骨架较连续、易于并行处理等特点

二、基本运算

1.简单介绍

  • 图像形态学的基本运算主要包括四种:膨胀、腐蚀、开运算和闭运算。

    • 腐蚀(Erosion):通过结构元素与图像进行卷积,将结构元素包含的图像区域缩小,以去除图像中小的细节和噪声。这一操作可以用于细化边缘、分离紧密相连的物体等。
    • 膨胀(Dilation):与腐蚀相反,膨胀操作通过结构元素与图像进行卷积,将结构元素包含的图像区域扩大,以填充图像中的空洞和连接图像中的断线。这有助于填充小的空洞、连接断裂的物体等。
    • 开运算(Opening):先进行腐蚀操作,再进行膨胀操作的组合。这种操作可以去除图像中的小噪声和细小物体,同时保留图像中的主要结构。
    • 闭运算(Closing):与开运算相反,闭运算是先进行膨胀操作,再进行腐蚀操作的组合。它可以用于填充图像中的小空洞,连接图像中的断裂结构,并平滑图像边缘。

2.代码实现

  • 基本运算代码实现

    import cv2
    import numpy as np
    
    # 读取图像(这里所给的图片已经是黑白图,直接读取,不需要进行二值化操作)
    image = cv2.imread('zhiwen.png')
    
    # 定义结构元素
    # 这里使用3x3的正方形结构元素
    kernel = np.ones((3, 3), np.uint8)
    
    # 腐蚀操作 cv2.erode()
    eroded_image = cv2.erode(image, kernel, iterations=1)  # iterations 为迭代次数(执行了多少次操作)
    
    # 膨胀操作 cv2.dilate()
    dilated_image = cv2.dilate(image, kernel, iterations=1)
    
    # cv2.morphologyEx() 函数用于执行更复杂的形态学操作,如开运算和闭运算
    # 开运算:先腐蚀后膨胀  cv2.MORPH_OPEN()
    opening_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
    
    # 闭运算:先膨胀后腐蚀  cv2.MORPH_CLOSE()
    closing_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
    
    # 显示结果
    cv2.imshow('Original Image', image)
    cv2.imshow('Eroded Image', eroded_image)
    cv2.imshow('Dilated Image', dilated_image)
    cv2.imshow('Opening Image', opening_image)
    cv2.imshow('Closing Image', closing_image)
    
    # 等待任意键按下后关闭所有窗口
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
  • 原图如下
    在这里插入图片描述

  • 腐蚀图(左)与膨胀图(右)
    在这里插入图片描述

  • 开运算图(左)与闭运算图(右)
    在这里插入图片描述

三、高级运算

1.简单介绍

  • 基于上述基本运算,还可以推导出多种高级形态学运算方法,如形态学梯度、顶帽变换、底帽变换等。

    • 形态学梯度(Morphological Gradient):通过膨胀和腐蚀操作的差异,可以得到图像边缘的强度信息,有助于边缘检测
    • 顶帽变换:先将图像进行开运算(先腐蚀后膨胀),然后将原始图像与开运算结果相减,作用与应用如下:
      • 顶帽变换能够突出原始图像中比周围区域更明亮的小尺度细节或亮度变化。
      • 常用于增强图像的局部对比度,以突出微小的细节,如血管、细胞核等。
      • 在医学图像分析(如血管和细胞核分割)以及纹理分析中发挥重要作用。
    • 黑帽变换:先将图像进行闭运算(先膨胀后腐蚀),然后用闭运算结果减去原始图像 ,作用与应用如下:
      • 黑帽变换能够突出原始图像中比周围区域更暗的小尺度细节或亮度变化。
      • 常用于检测图像中的小暗斑点或小暗物体,以及用于凸显亮背景上的暗物体。
      • 在图像增强、缺陷检测、文字识别等领域有广泛应用。

2.代码实现

  • 形态学梯度运算代码实现

    """梯度运算"""
    # 读取图片
    wenzi = cv2.imread('wenzi.png')
    
    # 定义结构元素
    # 这里使用2x2的正方形结构元素
    kernel = np.ones((2, 2), np.uint8)
    
    # 膨胀
    pz_wenzi = cv2.dilate(wenzi, kernel, iterations=2)
    # 腐蚀
    fs_wenzi = cv2.erode(wenzi, kernel, iterations=2)
    
    # 膨胀 - 腐蚀  cv2.MORPH_GRADIENT
    TiDu_wenzi = cv2.morphologyEx(wenzi, cv2.MORPH_GRADIENT, kernel)
    
    # 显示图片
    cv2.imshow('yuantu_wenzi', wenzi)
    cv2.imshow('pz_wenzi', pz_wenzi)
    cv2.imshow('fs_wenzi', fs_wenzi)
    cv2.imshow('TiDu_wenzi', TiDu_wenzi)
    
    # 等待任意键按下后关闭所有窗口
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
  • 原图
    在这里插入图片描述

  • 膨胀(左)、腐蚀(中)、形态学梯度运算(膨胀 - 腐蚀)(右)
    在这里插入图片描述

  • 顶帽和黑帽代码实现

    """顶帽和黑帽"""
    # 顶帽 = 原始图片 - 开运算结果(先腐蚀后膨胀)
    # 黑帽 = 原始图片 - 闭运算结果(先膨胀后腐蚀)
    
    # 读取图片
    sun = cv2.imread('sun.png')
    
    # 定义结构元素
    # 这里使用3x3的正方形结构元素
    kernel = np.ones((3, 3), np.uint8)
    
    # 开运算
    sun_open = cv2.morphologyEx(sun, cv2.MORPH_OPEN, kernel)
    # 闭运算
    sun_close = cv2.morphologyEx(sun, cv2.MORPH_CLOSE, kernel)
    
    # 顶帽  cv2.MORPH_TOPHAT
    tophat = cv2.morphologyEx(sun, cv2.MORPH_TOPHAT, kernel)
    
    # 黑帽  cv2.MORPH_BLACKHAT
    blackhat = cv2.morphologyEx(sun, cv2.MORPH_BLACKHAT, kernel)
    
    # 显示图片
    cv2.imshow('sun_yuantu', sun)
    cv2.imshow('sun_open', sun_open)
    cv2.imshow('sun_close', sun_close)
    cv2.imshow('TOPHAT', tophat)
    cv2.imshow('blackhat', blackhat)
    
    # 等待任意键按下后关闭所有窗口
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
  • 原图
    在这里插入图片描述

  • 开运算(左)与顶帽(右)
    在这里插入图片描述

  • 闭运算(左)与黑帽(右)
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/874141.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对极约束及其性质 —— 公式详细推导

Title: 对极约束及其性质 —— 公式详细推导 文章目录 前言1. 对极约束 (Epipolar Constraint)2. 坐标转换 (Coordinate Transformations)3. 像素坐标 (Pixel Coordinates)4. 像素坐标转换 (Transformations of Pixel Coordinates)5. 本质矩阵 (Essential Matrix)6. 线坐标 (Co…

知识赋能:构建高效测试团队的关键

目录 ​​​​​​问题背景 知识库的重要性 新员工的融入与关键岗位的风险控制 知识库的构成 常见问题讨论 团队历史包袱重、老员工不配合,怎么办? 1. 明确愿景和目标 2. 激励与认可 3. 赋予责任与参与感 4. 循序渐进,逐步推进 5.…

大语言模型的上下文窗口(Context Windows):对人工智能应用的影响

大语言模型(LLMs)极大地提升了人工智能在理解和生成类人文本方面的能力。其中一个影响其效用的基本方面是它们的 “上下文窗口”—— 这个概念直接影响着这些模型接收和生成语言的有效性。我将深入探讨上下文窗口是什么、它们对人工智能应用的影响以及组…

RFID光触发标签在物流行业的应用解决方案

一、产品技术特点 (一)工作原理 RFID光触发标签是一种创新的射频识别技术,结合了光电传感技术,当特定光线条件达到预设阈值时,光电传感激活标签内的射频芯片,与RFID读写器进行通信,实现自动数…

matlab数据批量保存为excel,文件名,行和列的名称设置

Excel文件内数据保存结果如下: Excel文件保存结果如下: 代码如下: clear;clc; for jjjj1:10 %这个可以改 jname(jjjj-1)*10; %文件名中变数 这是EXCEL文件名字的一部分 根据自己需要改 jkkkk_num2str(jname); for …

半导体的发展--创世新产品介绍

文章目录 半导体的发展 半导体的发展 现代社会对于芯片的需求是越来越多了,90 年代我们能在收音机,电视机,DVD,上面看到芯片的身影,进入 2000 年,电脑,手机逐渐进入中国家庭,中国高…

qq邮箱开启smtp

1、登录qq邮箱 2、找到smtp设置 开启 这里需要设置授权码 但是设置授权码之前最好先设置独立密码 因为如果没有设置独立密码 也是不能发送邮件的 设置了独立密码后 以前的授权码也失效了 帮助系统 帮助系统 获取授权码的时候需要手机发送一个短信 最后我们可以用这个在线工具测…

Redis学习——List的连锁更新如何解决?ListPack算法如何改变?

文章目录 引言正文List简介什么是连锁更新ListPack解决连锁更新 总结信息来源 引言 之前Redis匆匆学过之后,再回过头看,发现之前写的解决连锁更新的里有太过牵强了,有很多矛盾的地方,今天这里好好深挖一下,解决这个问…

LED会议一体机开启超微小间距COB高清显示在会议系统中的新乐章

在当今数字化、信息化高速发展的时代,会议系统作为企业沟通、决策的重要平台,其显示技术的革新正以前所未有的速度推动着会议体验的飞跃。LED会议一体机,作为这一领域的佼佼者,特别是当其融合了超微小间距COB(Chip On …

springboot项目实现分库

本文是根据仓库编码 和 仓库id进行按仓库进行分库处理,可以根据例子自行按照业务需要进行分库 1.核心是实现 Spring 的 AbstractRoutingDataSource 抽象类,重写 determineCurrentLookupKey 方法,实现动态数据源的目的 Slf4j public class D…

铁威马秋季新品即将上线,你想要的NAS我都有!

各位铁粉们,注意啦! 一场关于存储的饕餮盛宴即将拉开帷幕 铁威马,带着九款全新力作NAS 将于9月19日席卷全球市场 是的,你没听错 九款! 从入门级到专业级 从桌面型到机架式 全系搭载TOS 6 总有一款能击中你的心…

如何利用大数据与AI技术革新相亲交友体验

在数字化时代,大数据和人工智能(AI)技术正逐渐革新相亲交友体验,为寻找爱情的过程带来前所未有的变革(编辑h17711347205)。通过精准分析和智能匹配,这些技术能够极大地提高相亲交友系统的效率和…

架空输电线路故障监测:可视精灵的导线全方位监测之道

集高科技与智能化于一身的“架空输电线路故障可视精灵”,以精准、高效、全面的监测能力,成为守护输电线路安全的得力助手,接下来,深圳鼎信智慧带您走近它: 技术概述 物联网(IoT):通…

JavaSE-易错题集-004

1. 以下关于对象序列化描述正确的是 A 使用FileOutputStream可以将对象进行传输 B 使用PrintWriter可以将对象进行传输 C 使用transient修饰的变量不会被序列化 D 对象序列化的所属类需要实现Serializable接口 参考答案:CD 考点:对象序列化 题解&…

MYSQL1

一、为什么学习数据库 1、岗位技能需求 2、现在的世界,得数据者得天下 3、存储数据的方法 4、程序,网站中,大量数据如何长久保存? 5、数据库是几乎软件体系中最核心的一个存在。 二、数据库相关概念 (一)数据库DB 数据库是将大量数据保存起来,通过计算机加…

反向沙箱-安全上网解决方案

随着信息化的发展,企业日常办公越来越依赖互联网。终端以及普通PC终端在访问互联网过程中,会遇到各种各样不容忽视的风险,例如员工主动故意的数据泄漏,后台应用程序偷偷向外部发信息,木马间谍软件的外联,以…

Leetcode 最大子数组和

使用“Kadane’s Algorithm”来解决。 Kadane’s Algorithm 在每个步骤中都保持着一个局部最优解,即以当前元素为结尾的最大子数组和(也就是局部最优解),并通过比较这些局部最优解和当前的全局最优解来找到最终的全局最优解。 Kadane’s Algorithm的核…

Python全网最全基础课程笔记(七)——列表,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!

本专栏系列为Pythong基础系列,每篇内容非常全面,包含全网各个知识点,非常长,请耐心看完。 每天都会更新新的内容,搜罗全网资源以及自己在学习和工作过程中的一些总结,可以说是非常详细和全面。 以至于为什么…

如何划分类/单一职权原则SRP

参考:单一职责 -- 每个类只负责一个功能_每个类应该只负责一个功能,遵循单一职责原则。-CSDN博客 类有且只有一个原因需要修改它,这样的才是一个结构简洁的类。 结合上面的例子,需要注意的点: 1.比如搜索数据库,需要…

解锁生活密码,AI答案之书解决复杂难题

本文由 ChatMoney团队出品 介绍说明 “答案之书智能体”是您贴心的智慧伙伴,随时准备为您解答生活中的种种困惑。无论您在工作中遭遇瓶颈,还是在情感世界里迷失方向,亦或是对个人成长感到迷茫,它都能倾听您的心声,并给…