OpenCV教程——形态学操作。膨胀,腐蚀,开操作,闭操作,形态学梯度,顶帽,黑帽

news2025/1/19 9:11:35

1.形态学操作

图像形态学操作:基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学。

形态学有四个基本操作:膨胀、腐蚀、开、闭。

2.膨胀与腐蚀

2.1.膨胀

跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状

(左图为原图,右图为膨胀操作之后的输出图像。)

2.2.腐蚀

腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值。

(左图为原图,右图为腐蚀操作之后的输出图像。)

2.3.相关API

2.3.1.getStructuringElement

getStructuringElement函数会返回指定形状和尺寸的结构元素。

 
1
2
3
4
5
Mat getStructuringElement(
	int shape,
	Size ksize,
	Point anchor=Point(-1,-1)
);
  • 参数int shape表示内核的形状,有三种形状可以选择:
    1. 矩形MORPH_RECT
    2. 十字形MORPH_CROSS
    3. 椭圆MORPH_ELLIPSE
  • 参数Size ksize表示内核的大小(必须为正奇数)。
  • 参数Point anchor表示内核的锚点,默认位置在中心。

三种内核形状的说明,以5*5大小的内核为例:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#MORPH_RECT
1 1 1 1 1 
1 1 1 1 1 
1 1 1 1 1 
1 1 1 1 1 
1 1 1 1 1

#MORPH_CROSS
0 0 1 0 0 
0 0 1 0 0 
1 1 1 1 1 
0 0 1 0 0 
0 0 1 0 0 

#MORPH_ELLIPSE
0 0 1 0 0 
1 1 1 1 1 
1 1 1 1 1 
1 1 1 1 1 
0 0 1 0 0 

2.3.2.膨胀

 
1
2
3
4
5
6
7
8
9
void dilate( 
	InputArray src,//原始图像
	OutputArray dst,//输出图像
	InputArray kernel,//结构元素
	Point anchor = Point(-1,-1),//结构元素的锚点位置
	int iterations = 1,//膨胀操作执行次数
	int borderType = BORDER_CONSTANT,//图像边缘处理方式
	const Scalar& borderValue = morphologyDefaultBorderValue()//处理边缘用的值
);

2.3.3.腐蚀

腐蚀操作的API参数基本和膨胀相同,不再赘述。

 
1
2
3
4
5
6
7
8
9
void erode( 
	InputArray src,
	OutputArray dst, 
	InputArray kernel,
	Point anchor = Point(-1,-1), 
	int iterations = 1,
	int borderType = BORDER_CONSTANT,
	const Scalar& borderValue = morphologyDefaultBorderValue() 
);

3.其他形态学操作

3.1.开操作与闭操作

3.1.1.开操作

开操作:先腐蚀后膨胀。

上图左为原图,右为执行开操作之后的图。

3.1.2.闭操作

闭操作:先膨胀后腐蚀。

上图左为原图,右为执行闭操作之后的图。

3.2.形态学梯度

形态学梯度:膨胀减去腐蚀。

上图左为原图,右为执行形态学梯度之后的图。

很明显,该操作可用于提取边缘。

3.3.顶帽与黑帽

3.3.1.顶帽

顶帽:原图像与开操作之间的差值图像(对应像素值差的绝对值)。

以3.1.1部分的原图作为例子,顶帽操作得到的图像见下:

3.3.2.黑帽

黑帽:原图像与闭操作之间的差值图像。

以3.1.2部分的原图作为例子,黑帽操作得到的图像见下:

3.4.相关API

 
1
2
3
4
5
6
7
8
9
10
void morphologyEx( 
	InputArray src,//原图像
	OutputArray dst,//输出图像
	int op,//形态学操作类型
	InputArray kernel,//结构元素,使用getStructuringElement构建
	Point anchor = Point(-1,-1),//锚点
	int iterations = 1,//操作执行次数
	int borderType = BORDER_CONSTANT,//边界处理方式
	const Scalar& borderValue = morphologyDefaultBorderValue()//处理边界时所使用的值
);

其中,参数int op有以下几种选择:

  1. MORPH_ERODE=0:腐蚀
  2. MORPH_DILATE=1:膨胀
  3. MORPH_OPEN=2:开操作
  4. MORPH_CLOSE=3:闭操作
  5. MORPH_GRADIENT=4:形态学梯度
  6. MORPH_TOPHAT=5:顶帽操作
  7. MORPH_BLACKHAT=6:黑帽操作
  8. MORPH_HITMISS=7

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

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

相关文章

路径规划算法:基于灰狼优化的路径规划算法- 附代码

路径规划算法:基于灰狼优化的路径规划算法- 附代码 文章目录 路径规划算法:基于灰狼优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法灰狼…

自媒体的孔雀效应:插根鸡毛还是专业才华?

自媒体时代,让许多原本默默无闻的人找到了表达自己的平台。有人声称,现在这个时代,“随便什么人身上插根鸡毛就可以当孔雀了”。可是,事实真的如此吗? 首先,我们不能否认的是,自媒体确实为大众提…

【大数据】通过 docker-compose 快速部署 Presto(Trino)保姆级教程

文章目录 一、概述二、前期准备1)部署 docker2)部署 docker-compose 三、创建网络四、Trino 编排部署1)下载 trino2)配置1、coordinator 配置2、worker 配置 3)启动脚本 bootstrap.sh4)构建镜像 Dockerfile…

多尺度深度特征(下):多尺度特征学习才是目标检测精髓(论文免费下载)...

计算机视觉研究院专栏 作者:Edison_G 深度特征学习方案将重点从具有细节的具体特征转移到具有语义信息的抽象特征。它通过构建多尺度深度特征学习网络 (MDFN) 不仅考虑单个对象和局部上下文,还考虑它们之间的关系。 公众号ID|ComputerVisionG…

MySQL- 存储引擎

MySQL体系结构 连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程 池的概念,为通过认证安全接入的客户端…

通过自动装箱和拆箱解释所定义基础数据类型和其对应封装类的区别

文章目录 前言一、拆装箱的实质二、拓展1.数值超过128的Integer装箱2.Java内存分配 前言 在刷软中的时候涉及到了值传递和地址传递传参的区别,其中提到不管是将基础数据类型的变量传值给对象数据类型的变量还是反过来都属于值传递,究其原因就是期间发生了…

【本地模式】第一个Mapreduce程序-wordcount

【本地模式】:也就是在windows环境下通过hadoop-client相关jar包进行开发的,我们只需要通过本地自己写好MapReduce程序即可在本地运行。 一个Maprduce程序主要包括三部分:Mapper类、Reducer类、执行类。 map阶段:将每一行单词提…

XShell远程连接

xshell 是一个强大的安全终端模拟软件,它支持SSH1,SSH2以及microsoft windows 平台的TELNET协议。xshell通过互联网到远程主机的安全连接。 xshell可以在windows界面下来访问远程终端不同系统下的服务器,从而比较好的达到远程控制终端的目的。 步骤一 …

MySQL- 索引

索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外, 数据库系统还维护着满足特定查找算法的数据结构, 这些数据结构以某种方式引用数据, 这样就可以在这些数据结构上实现高级查找算法, 这种数据结构就是索引。 索引结构 MySQL的索引是在存储层实现的, 不同的存储引擎有…

网友总结:面试超过一个小时,通过概率更低;面试时长在半小时以内,通过概率更高!...

面试时长跟通过概率有关系吗? 一位网友分享了自己的求职感想: 面试过程越长,差不多一个小时或者超过一个小时,问得越详细,通过的可能性越低。因为问得越细,说明这个公司越挑,需要候选人匹配度越…

【C++ 入坑指南】(05)数据类型

文章目录 一、整型sizeof 关键字 二、实型(浮点型)三、字符型四、字符串型4.1 C 风格字符串4.2 C 引入的 string 类类型 五、布尔类型(bool)六、类型转换6.1 静态转换(Static Cast)6.2 动态转换&#xff08…

软考A计划-真题-分类精讲汇总-第六章(软件工程)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

阿里云服务器安装宝塔Linux面板教程图解

使用阿里云服务器安装宝塔面板教程,阿里云服务器网以CentOS操作系统为例,安装宝塔Linux面板,先远程连接到云服务器,然后执行宝塔面板安装命令,系统会自动安装宝塔面板,安装完成后会返回面板地址、账号和密码…

【mongoDB】mongodb权限验证 || mongodb重启 || mongodb常用命令

mongodb版本号 6.0 前言 mongoDB刚开始无需密码登录mongoDB有3默认数据库,分别为: admin 超级用户,能对所有数据库操作,执行管理员命令config 分片集群配置的数据库local 分片集群锁信息的集合test 这个数据库一般是隐式创建的&…

新书出版了(文末送书)

大家好,我是麦哥。 最近一位好友的新书出版了,由衷的替他开心,赶紧来支持一波。 新书长这样 这本书的作者是前中兴高级工程师,某知名培训机构的教学总监,现于某研究所担任重要的研发工作,我喜欢叫他彭老师。…

路径规划算法:基于蚁狮优化的路径规划算法- 附代码

路径规划算法:基于蚁狮优化的路径规划算法- 附代码 文章目录 路径规划算法:基于蚁狮优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法蚁狮…

路径规划算法:基于蝗虫优化的路径规划算法- 附代码

路径规划算法:基于蝗虫优化的路径规划算法- 附代码 文章目录 路径规划算法:基于蝗虫优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法蝗虫…

Python爬虫之美丽的汤——BeautifulSoup

本文概要 本篇文章主要介绍利用Python爬虫之美丽的汤——BeautifulSoup,适合练习爬虫基础同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧! 是不是以为今天要教大家怎么做饭?确实&…

MATLAB图像处理:图像分割、特征提取和目标识别的应用和优化

MATLAB图像处理:图像分割、特征提取和目标识别的应用和优化 作为一种常用的图像处理工具,MATLAB在图像分割、特征提取和目标识别等方面具有广泛的应用。本文将详细介绍这三个方面的应用和优化。 第一章:图像分割 图像分割是将一幅图像划分成…

阿里云服务器安装宝塔面板教程图解(超详细)

使用阿里云服务器安装宝塔面板教程,阿里云服务器网以CentOS操作系统为例,安装宝塔Linux面板,先远程连接到云服务器,然后执行宝塔面板安装命令,系统会自动安装宝塔面板,安装完成后会返回面板地址、账号和密码…