计算机视觉全系列实战教程 (十三):图像形态学操作

1.基本概述

(1)What

图像的形态学操作的本质:集合间的运算 + 几何学

(2)Why(有什么用途)

消除噪声、边缘提取、区域填充、细化和粗化、分割独立的图像元素、求图像梯度、求极大值区域或极小值区域等。

(3)Which(有哪些常见的形态学操作)

A.膨胀
使得图像中“亮色”范围依据传入的结构元kernel扩张
B.腐蚀
使得图像中“暗色”范围依据传入的结构元kernel扩张
C.开运算
先腐蚀,后膨胀(移除小的“亮色”对象)
D.闭运算
先膨胀,后腐蚀(移除小的“暗色”对象)
E.顶帽运算
顶帽 = 原图 - 开运算的结果(分离得到一些“亮”区域)
F.黑帽运算
黑猫 = 闭运算 - 原图(分离得到一些“暗”区域)
G.击中与击不中
根据给定的模板来寻找二值图像中特定的结构的位置(和模板结构一致的结构);击中与击不中是高级形态学变换的基础(如图像细化、剪枝操作等)

2. 如何进行形态学操作

(1)膨胀和腐蚀

这是形态学中最基本的两种操作,其它形态学操作都是基于这两种基本操作进行的。我这里称之为形态学的“基元操作”

step01:获取结构元
矩形(MORPH_RECT)、十字形(MORPH_CROSS)、椭圆形(MORPH_ELLIPSE)

//得到3阶矩阵,形状为矩形(值全为1)
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
//形状为十字形(十字形区域全为1,其它为0)
kernel = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3,3));

step02:膨胀和腐蚀
方式一:erode和dilate

int iTms = 10; //腐蚀和膨胀的次数
cv::Mat imTmp01, imTmp02;
cv::dilate(imGray, imTmp01, kernel, cv::Point(-1, -1), iTms);
cv::erode(imGray, imTmp02, kernel, cv::Point(-1, -1), iTms);

方式二:morphologyEx(还可以进行其它形态学操作:开、闭、顶帽、黑帽等)

int iTms = 10; //腐蚀和膨胀的次数
cv::Mat imTmp03, imTmp04;
cv::morphologyEx(imGray, imTmp03, cv::MORPH_ERODE, kernel, cv::Point(-1, -1), iTms);
cv::morphologyEx(imGray, imTmp04, cv::MORPH_DILATE, kernel, cv::Point(-1, -1), iTms);

(2)开运算和闭运算

MORPH_OPEN、MORPH_CLOSE

int iTms = 10; //腐蚀和膨胀的次数
cv::Mat imTmp05, imTmp06;
cv::morphologyEx(imGray, imTmp05, cv::MORPH_OPEN, kernel, cv::Point(-1, -1), iTms);
cv::morphologyEx(imGray, imTmp06, cv::MORPH_CLOSE, kernel, cv::Point(-1, -1), iTms);

(3)顶帽和黑帽

int iTms = 10; //腐蚀和膨胀的次数
cv::Mat imTmp07, imTmp08;
cv::morphologyEx(imGray, imTmp07, cv::MORPH_TOPHAT, kernel, cv::Point(-1, -1), iTms);
cv::morphologyEx(imGray, imTmp08, cv::MORPH_BLACKHAT, kernel, cv::Point(-1, -1), iTms);

(4)击中与击不中

A.Why(目的)
通过定义形状模板获取同一形状物体在图像中的位置。
B.What(相关概念)
击中结构元:用于腐蚀原始图像,得到击中的中间结果X
击不中结构元:用于腐蚀原始图像的补集,得到击不中的中间结果
C.How(如何使用击中和击不中)
step01:用击中结构元腐蚀图像A,得到X
step02:用击不中结构元腐蚀图像A的补集,得到Y
step03:X和Y进行与运算,得到结果图像,此时的结果图像击中结构元和击不中机构元相加的形状

cv::Mat kernel_hit = (cv::Mat_<int>(3, 3) << 0, 1, 0,
	1, 0, 1,
	0, 1, 0);
cv::Mat kernel_miss = (cv::Mat_<int>(3, 3) << 0, 0, 0,
	0, -1, 0,
	0, 0, 0);
cv::Mat kernel = kernel_hit + kernel_miss;
cv::Mat imInput = (cv::Mat_<uchar>(8, 8) <<   0,  0,   0,   0,  0,  0,  0,  0,
											0, 255, 255, 255, 0,  0,  0, 255,
											0, 255, 255, 255, 0,  0,  0,  0,
											0, 255, 255, 255, 0, 255, 0,  0,
											0,  0,  255,  0,  0,  0,  0,  0,
											0,  0,  255,  0,  0, 255,255, 0,
											0, 255,  0,  255, 0,  0, 255, 0,
											0, 255, 255, 255, 0,  0,  0,  0);
cv::Mat imOut;
cv::morphologyEx(imInput, imOut, cv::MORPH_HITMISS, kernel);

注意:imInput是uchar类型,其它是int类型;imOut是kernel在原图中的定位
在kernel中0可以匹配任意元素,1匹配255,-1匹配0

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

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

相关文章

搭建企业内网pypi镜像库,让python在内网也能像互联网一样安装pip库

目录 知识点实验1.服务器安装python2.新建一个目录/mirror/pip&#xff0c;用于存储pypi文件&#xff0c;作为仓库目录3.下载python中的所需包放至仓库文件夹/mirror/pip3.1. 新建requirement.py脚本&#xff08;将清华pypi镜像库文件列表粘贴到requirement.txt文件中&#xff…

Hadoop版本演变、分布式集群搭建

Hadoop版本演变历史 Hadoop发行版非常的多&#xff0c;有华为发行版、Intel发行版、Cloudera Hadoop(CDH)、Hortonworks Hadoop(HDP)&#xff0c;这些发行版都是基于Apache Hadoop衍生出来的。 目前Hadoop经历了三个大的版本。 hadoop1.x&#xff1a;HDFSMapReduce hadoop2.x…

mtu 1500 qdisc noop state DOWN group default qlen 1000问题的解决

问题描述 1、打开虚拟机终端&#xff0c;root身份启动ens网卡&#xff08;一般情况下还是会直接报错 ifup ens33 2、停止网卡设置disable再启动 systemctl stop NetworkManager 不报错即可 systemctl disable NetworkManagerservice network restart出现了绿色的OK啦&#…

流水线作业模拟程序

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 流水线作业模拟 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private int Count 0;private bool IsStop false;private void uiLight1_Click(object sender, EventArgs e…

某麦网自动刷新抢票脚本——手机端(高级版)

某麦网自动刷新抢票脚本——电脑端 小白操作-抵制黄牛–需要更好用更高级关注获取 如何用Python自动抢大麦网演出票&#xff1f; 在数字化时代&#xff0c;购票已经成为我们生活的一部分&#xff0c;无论是音乐会、话剧、体育赛事还是各种展览&#xff0c;抢票几乎成了一项“…

[每周一更]-(第103期):GIT初始化子模块

文章目录 初始化和更新所有子模块分步骤操作1. 克隆包含子模块的仓库2. 初始化子模块3. 更新子模块 查看子模块状态提交子模块的更改处理子模块路径错误的问题 该问题的缘由是因为&#xff1a;在写某些代码的时候&#xff0c;仓库中有些文件夹&#xff0c;只提交了文件夹名称到…

C# SocketUDP服务器,组播

SocketUDP 自己即是服务器又是客户端 &#xff0c;在发消息只需要改成对方ip和端口号即可 前提对方必须开启服务器 socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.107.72"), 8080)); 控件&#xff1a;Button,TextBox,RichTextBox 打开自己服务器 public…

六、资产安全—信息分级资产管理与隐私保护(CISSP)

目录 1.信息分级 2.信息分级方法 3.责任的层级 4.资产管理 5.隐私数据管理角色 6.数据安全控制 7.数据保护方案 8.使用安全基线 六、资产安全—数据管理(CISSP): 五、身份与访问管理—身份管理和访问控制管理(CISSP): 1.信息分级 信息分级举列: 2.信息分级方…

Halcon 文本文件操作,形态学

一文件的读写 *******************************************************向文本文件写入字符串内容*************************************************************read_image (Image, fabrik)threshold (Image, Region, 0, 120)area_center (Region, Area, Row, Column)open_…

记录一下MATLAB优化器出现的问题和解决

今天MATLAB优化器出了点问题。我想了想&#xff0c;决定解决一下&#xff0c;不然后面项目没有办法进行下去。 我忘了截图了。 具体来说&#xff0c;是出现了下面的问题。 Gurobi: Cplex: 在上次为了强化学习调整了Pytoch环境以后&#xff08;不知道是不是这个原因&#…

Mac(M1芯片)安装多个jdk,Mac卸载jdk

1.jdk下载 oracle官方链接&#xff1a;oracle官方下载链接 2.安装 直接下一步&#xff0c;下一步就行 3.查看是否安装成功 出现下图内容表示安装成功。 4.配置环境变量 open -e .bash_profile 路径建议复制过去 #刷新环境变量 source ~/.bash_profile 5.切换方法 6.jdk…

页分裂和页合并——Java全栈知识(33)

上篇文章我们讲到了 MySQL 的数据页&#xff0c;我们说到了 InnoDB 的索引是以 B树的形式构建的&#xff0c;而且 B树的节点都是一个数据页。 但是 B树在使用过程中难免会有节点分裂和节点合并的过程。 因为我们是以数据页为基本单位构造的 B树&#xff0c;那么 B树的节点分裂和…

火锅食材配送小程序的作用有什么

火锅店、麻辣烫店、餐厅等对火锅丸子食材的需求量很高&#xff0c;还有普通消费者零售等&#xff0c;市场中或城市里总是有着较为知名的食材店或厂商&#xff0c;通过产品质量、口碑、宣传、老客复购等获得更多生意营收。 线下生意放缓&#xff0c;需要商家拓宽渠道。运用雨科…

7thonline第七在线受邀出席零售业卓越运营联盟(COER)2024

近期&#xff0c;一场汇集行业精英、探讨卓越运营的盛会——零售业卓越运营联盟&#xff08;COER&#xff09;2024论坛开幕。此次论坛吸引了全球众多零售业者的关注&#xff0c;7thonline第七在线创始人马克骏先生也应邀参与该论坛&#xff0c;共同探讨零售业的未来发展趋势。 …

【保姆级详细介绍JavaScript初识及基本语法】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Java代码基础算法练习-判断学生成绩等级-2024.06.28

任务描述&#xff1a; 输入一个学生的成绩&#xff08;成绩大于等于 0 并小于等于 100&#xff09;&#xff0c;根据成绩判断学生成绩的等级。 60 分以下不及格&#xff1b;60-70 分为及格&#xff1b;70-80 分为中等&#xff1b;80-90 分为良好&#xff1b;90 分以上为优秀。 …

如何从iPhone恢复错误删除的照片

嘿&#xff0c;iPhone 用户&#xff01;作为一名苹果专业人士&#xff0c;我见过相当多的“哎呀&#xff0c;我删除了它&#xff01;”的时刻。今天&#xff0c;我在这里指导您完成从iPhone中恢复那些珍贵的&#xff0c;错误删除的照片的迷宫。坐下来&#xff0c;拿起你的设备&…

琴童杂志琴童杂志社琴童编辑部2024年第2期目录

成长空间 和钢琴成为一辈子的好朋友 赵宣萱; 4-5 弦外之音 雅克伊贝尔《室内乐小协奏曲》的演奏技术难点解析 张家睿;王韵然; 6-8 歌剧《艺术家的生涯》中咏叹调《人们叫我咪咪》的艺术特征和演唱处理 孙淼; 9-11《琴童》投稿&#xff1a;cn7kantougao163.com …

Transformer 结构

目录 一、Transformer 的整体结构二、Input Encoding三、Transformer Block3.1 Encoder3.1.1 Attention3.1.2 Self-attention3.1.3 Multi-head Attention 3.2 Decoder3.2.1 Masked Multi-head Attention 四、Transformer 的优缺点 遇到看不明白的地方&#xff0c;欢迎在评论中留…

spring boot 3.0.1多模块项目使用nacos动态配置

根pom文件增加&#xff0c;spring-cloud-alibaba包管理&#xff0c;注意版本spring-boot 3.0.3&#xff0c;spring-cloud-alibaba 2022.0.0.0-RC1 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0…