【OpenCV C++20 学习笔记】形态学变换(morphologyEx)

news2024/11/16 11:30:33

@TOC

理论

开运算

开运算实际上就是腐蚀之后再膨胀,用公式表达就是:
d s t = o p e n ( s r c , e l e m e n t ) = d i l a t e ( e r o d e ( s r c , e l e m e n t ) ) dst=open(src, element) = dilate(erode(src, element)) dst=open(src,element)=dilate(erode(src,element))

  • d s t dst dst是对应计算中的目标图片
  • s r c src src是对应计算中的原图片
  • e l e m e n t element element为对应计算中的卷积核
  • o p e n open open为开运算; d i l a t e dilate dilate为膨胀运算; e r o d e erode erode为腐蚀运算
  • 关于膨胀和腐蚀运算,可以参考我的另一篇文章《腐蚀和膨胀》

这种操作对于消除小的图像元素非常有效,但消除的元素必须是在暗背景中的亮的元素。
下图左边就是原图,右边是开运算后的效果:
开运算效果

闭运算

与开运算相反,它是在膨胀之后,再腐蚀,用公式表示就是:
d s t = c l o s e ( s r c , e l e m e n t ) = e r o d e ( d i l a t e ( s r c , e l e m e n t ) ) dst=close(src, element) = erode(dilate(src, element)) dst=close(src,element)=erode(dilate(src,element))

  • d s t dst dst是对应计算中的目标图片
  • s r c src src是对应计算中的原图片
  • e l e m e n t element element为对应计算中的卷积核
  • c l o s e close close为闭运算; d i l a t e dilate dilate为膨胀运算; e r o d e erode erode为腐蚀运算
    它的效果与开运算也相反,虽然同样能消除小的图像元素,但消除的元素必须是在亮背景上的暗的元素。
    下图左边是原图,右边是闭运算后的效果:
    闭运算效果

形态学梯度

形态学梯度实质上是图像在膨胀和腐蚀之间的差,用公式表示就是:
d s t = m o r p h g r a d ( s r c , e l e m e n t ) = d i l a t e ( s r c , e l e m e n t ) − e r o d e ( s r c , e l e m e n t ) dst=morph_{grad}(src, element)=dilate(src, element)-erode(src, element) dst=morphgrad(src,element)=dilate(src,element)erode(src,element)

  • d s t dst dst是对应计算中的目标图片
  • s r c src src是对应计算中的原图片
  • e l e m e n t element element为对应计算中的卷积核
  • m o r p h g r a d morph_{grad} morphgrad为形态学梯度运算; d i l a t e dilate dilate为膨胀运算; e r o d e erode erode为腐蚀运算
    形态学梯度在找出图像元素的轮廓中非常有用。
    下图左边是原图,右边是形态学梯度运算后的效果:
    形态学梯度效果

顶帽运算

顶帽运算计算的是原图和它的开运算之间的差,用公式表示就是:
d s t = t o p h a t ( s r c , e l e m e n t ) = s r c − o p e n ( s r c , e l e m e n t ) dst=tophat(src, element)=src-open(src, element) dst=tophat(src,element)=srcopen(src,element)

  • d s t dst dst是对应计算中的目标图片
  • s r c src src是对应计算中的原图片
  • e l e m e n t element element为对应计算中的卷积核
  • t o p h a t tophat tophat为顶帽运算; o p e n open open为开运算
    顶帽运算往往用来消除比邻近点亮一些的斑块。
    下图左边是原图,右边是顶帽运算的效果:
    顶帽运算效果

黑帽运算

黑帽运算是闭运算与原图之间的差,用公式表示就是:
d s t = b l a c k h a t ( s r c , e l e m e n t ) = c l o s e ( s r c , e l e m e n t ) − s r c dst = blackhat(src, element)= close(src, element)-src dst=blackhat(src,element)=close(src,element)src

  • d s t dst dst是对应计算中的目标图片
  • s r c src src是对应计算中的原图片
  • e l e m e n t element element为对应计算中的卷积核
  • b l a c k h a t blackhat blackhat为黑帽运算; c l o s e close close为闭运算
    黑帽运算与顶帽运算相反,往往用来消除比邻近点暗一些的斑块
    下图左边是原图,右边是黑帽运算的效果:
    黑帽运算效果

代码实现

创建卷积核

Mat element = getStructuringElement(MORPH_RECT,		//核的形态
									Size(3, 3),		//核的尺寸,默认3*3
									Point(-1, -1));	//核的锚点,(-1,-1)表示核的中心

其中第1个参数决定了卷积核的形态,有以下枚举类型:

  • MORPH_RECT:矩形
  • MORPH_CROSS:十字形
  • MORPH_ELLIPSE:椭圆形

形态学变换运算

morphologyEx(src,		//原图
			dst,		//目标图
			operation,	//形态学变换运算类型
			element);	//卷积核

其中第3个参数决定了使用上述哪种形态学变换运算类型:

  • MORPH_OPEN:开运算,对应整数2
  • MORPH_CLOSE:闭运算,对应整数3
  • MORPH_GRADIENT:形态学梯度运算,对应整数4
  • MORPH_TOPHAT:顶帽运算,对应整数5
  • MORPH_BALCKHAT:黑帽运算,对应整数6

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

保研408真题练习:2009年全国硕士研究生入学统一考试(单选篇2)

🧊🧊🧊单项选择题(共40道) 🧊操作系统(8道) 🥥1.进程调度算法 高响应比优先调度:选出响应比最高的进程投入执行,响应比R(等待时间+执…

钉钉 钉钉打卡 钉钉定位 2024 免费试用 保用

打卡助手定位 如图,表示开启成功,软件已定位到钉钉打卡位置。 测试显示,高德地图位置已成功修改。 开启助手定位后,观察效果,打卡按钮由无法打卡变为可打卡状态,照片还显示打卡地点。 伙伴们担心作弊行为会…

如何使用nodejs的fsPromise.access()判断文件权限

同学们可以私信我加入学习群! 正文开始 一种错误示范fsPromise.access正确的书写总结 一种错误示范 我们操作文件的时候,经常需要提前判断文件的状态:文件是否存在、文件是否可读、文件是否可写。 查看官网介绍后,按照我们平时的…

WinRAR右键压缩文件功能消失。有什么方法可以恢复吗?

WinRAR作为一款广受欢迎的压缩软件,以其高效、便捷的特点深受用户喜爱。然而,在使用过程中,有时我们可能会遇到右键菜单中WinRAR的压缩文件功能消失的情况,这无疑给我们的文件操作带来了不便。下面小编就来给大家详细介绍当WinRAR…

【C语言】【计算机组成原理】进制转换和原码、反码、补码

目录 一、进制转换 (1)数字进制的4个概念 (2)x进制转换成十进制 (3)十进制转换成x进制(除x取余法) (4)二进制与八进制的相互转换 (5&#xf…

【AI落地应用实战】DAMODEL深度学习平台部署+本地调用ChatGLM-6B解决方案

ChatGLM-6B是由清华大学和智谱AI开源的一款对话语言模型,基于 General Language Model (GLM)架构,具有 62亿参数。该模型凭借其强大的语言理解和生成能力、轻量级的参数量以及开源的特性,已经成为在学术界和工业界引起了广泛关注。 本篇将介…

成为 Spring Boot + Vue 图书作者的必备素养

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

Python 使用 Detectron2 进行目标检测 (Detectron2, CenterNet2, Detic)

代码说明 代码主要是一个用来演示如何使用 Detectron2 进行目标检测的脚本。它可以从摄像头或视频文件中读取图像,并应用指定的配置文件进行目标检测。其中,Detectron2 结合了 CenterNet2 和 Detic 进行目标检测。 主要库介绍 Detectron2 Detect…

UMG文本控件(UTextBlock)超过边界区域以后显示省略号

测试版本:UE5.4.1 UMG文本控件超过边界区域以后显示省略号

基于springboot+vue+uniapp的校园快递平台小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

【打家劫舍】python刷题记录

R3-递归篇。第100篇blog. 思路: 和爬楼梯有点相似,每次隔1格,2格,3格----(隔3格就亏了,所以还是类似爬楼梯问题,1格或者2格) class Solution:def rob(self, nums: List[int]) -> int:cur,pre0,0for nu…

科普文:Linux目录详解

在 Linux/Unix 操作系统中,一切都是文件,甚至目录也是文件,文件是文件,鼠标、键盘、打印机等设备也是文件。 这篇文章,我们将一起学习 Linux 中的目录结构及文件。 Linux 的文件类型 Linux系统中的文件系统&#xf…

图片太大怎么压缩变小?图片太大压缩变小的几个方法

图片太大怎么压缩变小?在当今数字化时代,图像的处理和分享已经成为日常工作和生活中不可或缺的一部分。然而,有时我们会遇到一个普遍的问题:图片文件太大,需要压缩以便于存储、传输或发布。为什么要压缩图片呢&#xf…

【PCB prepreg】PP 参数比选 四 <预浸料树脂流>

预浸料树脂在压力下加热时会熔化和流动。这通常被称为树脂流动。树脂的流动取决于压力和树脂使用的热量。树脂可以自由流动的时间有限。在成为流体一段时间后,树脂会变成凝胶。 预浸料树脂的流动性对层压操作至关重要,而层压条件会影响这种流动性。此外…

程序员修炼之路

成为一名优秀的程序员,需要广泛而深入地学习多个领域的知识。这些课程不仅帮助建立扎实的编程基础,还培养了问题解决、算法设计、系统思维等多方面的能力。以下是一些核心的必修课: 计算机基础 计算机组成原理:理解计算机的硬件组…

国内备受好评PostgreSQL数据库性能如何?

为什么国内很多数据库采用PostgreSQL数据库作为基础,再次开发自己的产品呢?不仅仅是因为PostgreSQL数据库开源免费、PostgreSQL 数据库的性能也是相当出色的,具有以下几个方面的特点: 1. 处理大规模数据: - 能够有效地管理和处…

外设购物平台

目 录 一、系统分析 二、系统设计 2.1 系统功能设计 2.2 数据库设计 三、系统实现 3.1 注册功能 3.2 登录功能 3.3 分页查询所有商品信息功能 3.4 分页条件(精确、模糊)查询商品信息功能 3.5 购物车功能 3.6 订单管理功能 四、项…

javafx的ListView代入项目的使用

目录 1. 创建一个可观察的列表,用于存储ListView中的数据,这里的User是包装了用户的相关信息。 2.通过本人id获取friendid,及好友的id,然后用集合接送,更方便直观一点。 3.用for遍历集合,逐个添加。 4.渲染器&…

css各种使用案例合集(二)

1、hover动画 场景1&#xff1a;要求有旋转、变色&#xff0c;有变化过程 场景结果&#xff1a; 代码示例&#xff1a; <div class"box"><div class"headUp"></div><div class"head"></div><div class"mo…

全面整理人工智能(AI)学习路线图及资源推荐

在人工智能&#xff08;AI&#xff09;飞速发展的今天&#xff0c;掌握AI技术已经成为了许多高校研究者和职场人士的必备技能。从深度学习到强化学习&#xff0c;从大模型训练到实际应用&#xff0c;AI技术的广度和深度不断拓展。作为一名AI学习者&#xff0c;面对浩瀚的知识海…