OpenCVForUnity(十)扩张与侵蚀效果

news2024/11/25 4:35:38

文章目录

  • 前言
  • 扩张
    • 案例展示
  • 侵蚀
    • 案例展示
  • 结语:


前言

在这个教程中,您将学习两种常见的图像形态运算符:侵蚀和膨胀。为此,您将使用OpenCV库中的两个函数:erode 和 dilate。
形态操作是一组基于形状的图像处理操作。形态操作会将结构元素应用于输入图像,并生成输出图像。

其中最基本的形态操作是侵蚀和膨胀。它们具有广泛的应用,包括:
1.消除噪声。
2.分离图像中的单个元素并连接不同的元素。
3.查找图像中的凸点或孔洞。

我们将使用以下图像作为示例来简要解释侵蚀和膨胀操作:
在这里插入图片描述


扩张

在形态操作中,包括将图像与一个内核(B)进行卷积,该内核可以是任何形状或尺寸,通常是正方形或圆形。内核具有一个定义的锚点,通常位于内核的中心。

当内核在图像上移动时,我们计算内核与图像重叠部分的最大像素值,并用该最大值替换锚点位置的像素值。可以推断出,这种最大化的操作会使图像中的亮区域扩大(因此称为膨胀操作)。
以提供的图像为例,通过应用膨胀操作,我们可以得到以下结果:BB
在这里插入图片描述

在这个例子中,我们将使用一个倒置的原始图像来更好地理解概念,并避免可能的混淆。在这个倒置的图像中,白色的对象表示字母。

我们将对这个倒置的图像应用两次3x3大小的矩形结构元素的膨胀操作。
通过这两次膨胀操作,我们会观察到背景(即黑色区域)被扩大,而字母的白色区域则保持不变。这是因为膨胀操作会将结构元素放置在图像上,然后计算最大像素值,并用该值替换结构元素的中心像素。

因此,在这个例子中,这两次膨胀操作会扩大背景(即黑色地区),而字母的白色区域则保持不变。

在这里插入图片描述

案例展示

//图片读取
string readPath1 = Application.dataPath + "/OpenCVForUnity/Examples/Resources/flower.jpg";
Mat blurMat = Imgcodecs.imread(Utils.getFilePath(readPath1), Imgcodecs.IMREAD_COLOR);
//扩张效果处理
int dilationSize = 5;
Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2 * dilationSize + 1, 2 * dilationSize + 1), new Point(dilationSize, dilationSize));
Imgproc.dilate(blurMat, blurMat, element);
//色彩模式转换
Imgproc.cvtColor(blurMat, blurMat, Imgproc.COLOR_BGR2RGB);
//展示图片
Texture2D blurTexture = new Texture2D(blurMat.cols(), blurMat.rows(), TextureFormat.RGB24, false);
Utils.matToTexture2D(blurMat, blurTexture);
GameObject.Find("Cube1").GetComponent<Renderer>().material.mainTexture = blurTexture;

以下左边是原图,右边是效果图:
在这里插入图片描述

首先是需要用Imgproc.getStructuringElement为函数构建指定形状和大小:
Imgproc.getStructuringElement(shape形状,ksize大小,anchor锚点)

  1. 矩形框:Imgproc.MORPH_RECT
  2. 十字架:Imgproc.MORPH_CROSS
  3. 椭圆:Imgproc.MORPH_ELLIPSE

侵蚀

侵蚀操作是膨胀操作的反向操作。它计算给定内核区域的局部最小值。
当侵蚀操作的内核在图像上扫描时,我们计算内核与图像重叠部分的最小像素值,并用该最小值替换锚点位置的图像像素值。
回到之前的膨胀的例子,我们现在将侵蚀操作应用于原始图像。结果如下,您可以看到图像的亮区域(背景)变得更窄,而暗区域(字母)变得更大。
在这里插入图片描述

根据您的要求,我们将对反转的原始图像应用两次具有3x3大小的矩形结构元素的侵蚀操作。请注意,在这个过程中,我们使用的是倒置的图像。
通过这两次侵蚀操作,我们可以观察到对象(即字母)变得更白。这是因为侵蚀操作计算内核区域的局部最小值,并用该最小值替换锚点位置的图像像素值。
在这里插入图片描述

所以,在这个例子中,这两次侵蚀操作使得图像中的对象(即字母)变得更白。

案例展示

//图片读取
string readPath1 = Application.dataPath + "/OpenCVForUnity/Examples/Resources/ZI.jpg";
Mat blurMat = Imgcodecs.imread(Utils.getFilePath(readPath1), Imgcodecs.IMREAD_COLOR);
//消融效果处理
int erosionSize = 1;
Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2 * erosionSize + 1, 2 * erosionSize + 1), new Point(erosionSize, erosionSize));
Imgproc.erode(blurMat, blurMat, element);
//色彩模式转换
Imgproc.cvtColor(blurMat, blurMat, Imgproc.COLOR_BGR2RGB);
//图片展示
Texture2D blurTexture = new Texture2D(blurMat.cols(), blurMat.rows(), TextureFormat.RGB24, false);
Utils.matToTexture2D(blurMat, blurTexture);
GameObject.Find("Cube1").GetComponent<Renderer>().material.mainTexture = blurTexture;

以下左边是原图,右边是效果图:
在这里插入图片描述

结语:

扩张和侵蚀是一对非常有用的辅助效果,理解了他的工作原理和效果可以为图形进行进一步的加工和处理,以达到想要的效果。
好啦,这节的介绍就到这里,欢迎观看,可以的话顺手点个赞,谢谢。

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

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

相关文章

java+springboot+mysql校园宿舍报修管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的校园宿舍报修管理系统&#xff0c;系统包含管理员、维修员、学生角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;楼栋管理、宿舍管理、维修人员管理、学生管理&#xff1b;报修管理&#xff08;派单给维修员&am…

k8s概念-StatefulSet

StatefulSet 是用来管理有状态应用的控制器 StatefulSet 用来管理某Pod集合的部署和扩缩&#xff0c; 并为这些 Pod 提供持久存储和持久标识符StatefulSet | KubernetesStatefulSet 运行一组 Pod&#xff0c;并为每个 Pod 保留一个稳定的标识。 这可用于管理需要持久化存储或稳…

系统架构师---UP统一过程常考概念

前言&#xff1a; 在 计算机诞生的年代&#xff0c;计算机是一种 只有天才才能掌握的工具。人们对软件的 认知仅仅停留在程序的层面上&#xff0c;所谓的软件开发就是那些能够掌握计算机的天才们写的一些只有计算机才能理解的二进制序列 。但是随着技术的发展&#xff0c;软件…

【计算机网络】传输层协议 -- TCP协议

文章目录 1. TCP协议的引入2. TCP协议的特点3. TCP协议格式3.1 序号与确认序号3.2 发送缓冲区与接收缓冲区3.3 窗口大小3.4 六个标志位 4. 确认应答机制5. 超时重传机制6. 连接管理机制6.1 三次握手6.2 四次挥手 7. 流量控制8. 滑动窗口9. 拥塞控制10. 延迟应答11. 捎带应答12.…

手撕SpringBoot的自定义启动器

一. 前言 哈喽&#xff0c;大家好&#xff0c;最近金九银十&#xff0c;又有不少小伙伴私信辉哥&#xff0c;说自己在面试时被问到SpringBoot如何自定义启动器&#xff0c;结果自己不知道该怎么回答。那么今天就手把手地带着大家&#xff0c;去看看在SpringBoot中到底该怎么实…

半导体制造工艺流程

本资料仅用于学习和讨论&#xff0c;如有侵权请反应 1、半导体制造工艺流程-要求 1.1 英特尔50亿纳米的制作工艺 2、第一步 晶圆加工 2.1 第一步 晶圆加工 2.2 第二步 氧化 2.3 第三步 光刻 2.4第四步 刻蚀 2.5 第五步 薄膜沉积 2.6 第六步 互连 2.7 第七步 测试 2.8…

奥威软件SaaS BI系统:一站式数据可视化解决方案

SaaS BI 系统是 Software as a Service 商业智能的缩写&#xff0c;是一种基于云计算的商业智能解决方案。它允许用户通过互联网访问和分析数据&#xff0c;而无需安装和维护昂贵的硬件和软件。如今将BI系统SaaS化已成趋势&#xff0c;越来越多的企业开始寻找SaaS BI系统&#…

IDA分析实例android_crackme/EasyJNI/Transformers/pingan2

文章目录 第一个实例android_crackme将32位的android_server放到手机目录下给android_server赋予root更改root用户组运行android_serverpc端端口转发安装apk&#xff0c;并运行app打开32位IDA并attach到进程先使用jadx看java层逻辑定位要分析的方法IDA 给两个方法打断点 第二个…

无涯教程-jQuery Mock Test函数

本节介绍了与 jQuery Framework 相关的各种模拟测试。您可以在本地计算机上下载这些样本模拟测试,并在方便时离线解决。每个模拟测试均随附一个模拟测试键,可让您验证最终分数并为自己评分。 Mock Test I Mock Test II Mock Test III Mock Test IV Q 1 -关于jQuery,以下哪项是…

【LeetCode 75】第十六题(1004)最大连续1的个数

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给一个只有0和1的数组&#xff0c;可以将K个0变成1&#xff0c;问最大能得到的全是1的子数组的长度是多少。 这算是很经典的滑动…

领域驱动设计(五) - 战术设计 - 【3/3】聚合与模型的构建方法

这一小章主要阐述下如何组织上述分析后的模型。 使用聚合&#xff08;Aggergate&#xff09;进行建模&#xff0c;并且在设计中结合工厂&#xff08;Factory&#xff09;和资源库&#xff08;Repositiory&#xff0c;注意Orm映射出的持久化对象不是领域模型的范围&#xff0c;在…

深入理解ClickHouse跳数索引教程

跳数索引 影响ClickHouse查询性能的因素很多。在大多数场景中&#xff0c;关键因素是ClickHouse在计算查询WHERE子句条件时是否可以使用主键。因此&#xff0c;选择适用于最常见查询模式的主键对于表的设计至关重要。 然而&#xff0c;无论如何仔细地调优主键&#xff0c;不可…

Java导出数据到Excel

Java导出数据到Excel分3步处理 1、构建Workbook 数据 2、设置Workbook 格式 3、导出到Excel 1、构建Workbook 数据 public static void buildData(Workbook wb, List<Person> list) {Sheet sheetName wb.createSheet("sheetName");Row row sheetName.creat…

macOS 环境变量加载探究

使用 macOS 安装环境&#xff0c;见到过很数种环境变量配置方法&#xff0c;每次也都是按照别人的代码&#xff0c;人家配置在哪 我就配置在哪&#xff0c;其实不太清楚有什么区别&#xff0c;决定记录下。 本机 macOS 13.3&#xff0c;从 macOS Catalina(10.15) 开始&#xf…

软件测试入门基础知识

目录 1.软件测试的定义 2.软件测试的生命周期 3.如何描述一个bug 4.bug的级别如何定义 5.bug生命周期 6.软件测试策略 7.软件测试模型 7.1传统瀑布模型 7.2V模型 7.3W模型&#xff08;双V模型&#xff09; 7.4敏捷模型 7.5X模型 1.软件测试的定义 首先要明确测试的定义…

systemVerilog基础9——类的继承

1、 描述子类继承父类的关键词&#xff1a;extends 之前定义过的类Packet&#xff0c;可以进一步扩展构成一个它的子类LinkedPacket。类Packet的定义如下&#xff1a; class Packet ;//class定义类 类名 packet//类 packet的成员//数据或类属性bit [3:0] command; bit [40:0] …

【css】背景图片附着

属性&#xff1a;background-attachment 属性指定背景图像是应该滚动还是固定的&#xff08;不会随页面的其余部分一起滚动&#xff09;。 background-attachment: fixed&#xff1a;为固定&#xff1b; background-attachment: scroll为滚动 代码&#xff1a; <!DOCTYPE h…

TypeScript基础学习

目录 一、安装 1、下载国内镜像 2、安装 3、查看安装情况 4、使用例子 二、变量声明 1、规则 2、声明的四种方式 3、注意 4、类型断言 5、类型推断 6、变量作用域 三、基础类型&#xff08;共11种&#xff09; 1、Any 类型 2、Null 和 Undefined 3、never 类型…

医药化工企业洁净厂房改造消防防爆安全的重要性

设计 【摘要】&#xff1a;近年来&#xff0c;我国医药化工企业规模不断扩大。医药化工企业的情况复杂&#xff0c;稍有不慎将发生火灾或者爆炸&#xff0c;对人员生命以及财产安全造成巨大的损害&#xff0c;酿成悲剧。所以&#xff0c;“三同时”原则的落实&#xff0c;如何…

伊语IM即时通讯源码/im商城系统/纯源码IM通讯系统安卓+IOS前端纯原生源码

伊语IM即时通讯源码/im商城系统/纯源码IM通讯系统安卓IOS前端纯原生源码&#xff0c; 后端是java源码。