【Emgu CV教程】9.3、形态学常用操作之开运算

文章目录

  • 一、相关概念
    • 1.什么叫开运算
    • 3.开运算的函数
  • 二、演示
    • 1.原始素材
    • 2.代码
    • 3.运行结果


一、相关概念

1.什么叫开运算

腐蚀、膨胀已经讲完,这两个是最基础的形态学操作。这次讲的是开运算,它是一个先腐蚀、后膨胀的过程。原始图像先被腐蚀,这一步去除了白色前景物体的边缘毛刺、雪花噪声。然后再进行膨胀操作,回复原始前景物体的大小、或者连接因为腐蚀而断开的前景物体。

它就是用同一个结构元素,连续进行两次操作,所以开运算能够除去雪花噪声、毛刺,而前景物体的位置、形状、大小保持不变。

3.开运算的函数

Emgu CV中,开运算的函数定义如下:

public static void MorphologyEx(
	IInputArray src,  // 输入图像
	IOutputArray dst, // 输入图像
	MorphOp operation, // 操作方式,开运算是MorphOp.Open
	IInputArray kernel, // 结构元素大小
	Point anchor, // 锚点位置,默认为中心new Point(-1, -1)
	int iterations, // 膨胀操作迭代次数
	BorderType borderType, // 边界填充方式,一般取默认
	MCvScalar borderValue // 边界值,使用时一般写成new MCvScalar()
)

注意哈,开运算和后面将要讲的闭运算,都是同一个函数MorphologyEx(),但是开运算的参数MorphOp operation,要指定为MorphOp.Open

二、演示

1.原始素材

原始素材srcMat是OpenCV官方使用的一张图片,图片内有不少的雪花噪声,如下图:
在这里插入图片描述

2.代码

Emgu CV开运算演示代码如下:

Mat tempMat = srcMat.Clone();
Mat gray = new Mat();
Mat dstMat = new Mat();
int kernelX = Convert.ToInt16(TextBoxX.Text.Trim().ToString()); // structuring element结构元素 或者 kernel 内核的X值,水平方向
int kernelY = Convert.ToInt16(TextBoxY.Text.Trim().ToString()); // structuring element结构元素 或者 kernel 内核的X值,垂直方向
int iterations = Convert.ToInt16(TextBoxIterations.Text.Trim().ToString()); // 需要执行开运算的次数

// 要转成灰度图
CvInvoke.CvtColor(tempMat, gray, ColorConversion.Bgr2Gray);

// 定义结构元素,其中元素的形状是矩形,size大小由两个文本框决定,默认锚点new Point(-1,-1)是指在中心
Mat element = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new System.Drawing.Size(kernelX, kernelY), new System.Drawing.Point(-1, -1));

// 开运算,其中锚点位置new Point(-1, -1)代表中心
CvInvoke.MorphologyEx(gray, dstMat, MorphOp.Open, element, new System.Drawing.Point(-1, -1), iterations, BorderType.Default, new MCvScalar());
CvInvoke.Imshow("Gray, " + gray.Size.ToString(), gray);
CvInvoke.Imshow("Open, " + dstMat.Size.ToString(), dstMat);

注意哈,结构元素的内核要对水平方向和垂直方向分别定义。

3.运行结果

假设kernelX = 9,kernelY =9,iterations = 1, 开运算结果如下所示:
在这里插入图片描述

是不是雪花噪声没了,但是英文字母j的大小、形状、位置都没有变化?????。我们再换一张图,并且设kernelX = 19,kernelY =1,iterations = 1, 其灰度图和开运算结果如下所示:
在这里插入图片描述
原始图像有很多雪花噪声,而且水平、垂直方向都有前景,经过开运算后,雪花噪声没了,垂直方向的前景也消失了。就是因为它第一步腐蚀操作的特性:腐蚀时结构元素水平方向值越大,目标图像中竖向前景越容易被腐蚀。 。虽然后面执行了膨胀操作,但是因为上一步腐蚀时,垂直方向大片区域都已经变成0了,再膨胀也救不回来了。

如果假设kernelX = 1,kernelY =19,iterations = 1 ,输出的图像是这样:
在这里插入图片描述
去除雪花噪声的同时,消除了前景物体的水平区域,保留了前景物体的垂直区域,读者们能理解吧。


原创不易,请勿抄袭。共同进步,相互学习。

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

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

相关文章

使用Anaconda创建Python指定版本的虚拟环境

由于工作的需要和学习的需要,需要创建不同Python版本的虚拟环境。 比如zdppy的框架,主要支持的是Python3.8的版本,但是工作中FastAPI主要使用的是3.11的版本,所以本地需要两套Python环境。 决定使用Anaconda虚拟环境管理的能力&…

发那科数控机床FanucCNC(NCGuide)仿真模拟器配置和数据采集测试

开发日记3.12 此篇用于记录发那科数控机床(Fanuc CNC)采集程序开发中,用虚拟机做测试时,虚拟机的配置和使用以支持采集软件开发和测试。 配置虚拟机使用仿真软件 下载VMware15 「链接:https://pan.xunlei.com/s/VNsl9Gmb14ANBiiNlsT7vA2LA…

Chrome下载B站视频字幕的插件

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

多模态大模型Claude 3正式接入集简云与语聚!对标GPT-4且支持中文

自OpenAI发布GPT-4以来,引发了业务模式与应用使用的巨大变革,掀起了各大企业对于多模态大模型的研究热潮。3月初,AnthropicClaude在官网正式发布Claude 3系列多模态大模型,据了解,该模型在多个维度上超越了GPT-4&#…

Vcenter 定制创建 Rocky Linux 虚拟机

文章目录 1. 图形化安装2. 初始化配置 1. 图形化安装 2. 初始化配置 Centos 8.2 指南

图像分割损失函数

为什么要乘以2,是为了让DICE的值域在0和1之间 优化:两种LOSS相加 Focus loss:

C++的类和对象(六):友元、内部类

目录 友元 友元函数 友元类 内部类 匿名对象 拷贝对象时的一些编译器优化 再次理解类和对象 友元 基本概念:友元提供了一种突破封装的方式,有时提供了便利,但是友元会增加耦合度,破坏了封装,所以友元不宜多用&…

力扣--课程表--bfs+dfs

整体思路: 这是一道拓扑序列的题目,我们将边的方向定义成从先修课指向后修课的方向,借一下官方的题解图片,我们需要判断的是形成的这个图结构是否存在环,如果存在环,那么代表不能完成所有课程的学习。 bfs思…

2.Datax数据同步之Windows下,mysql和sqlserver之间的自定义sql文数据同步

目录 前言步骤操作大纲步骤明细mysql 至 sqlServersqlServer 至 mysql执行同步语句中报 前言 上一篇文章实现了不同的mysql数据库之间的数据同步,在此基础上本篇将实现mysql和sqlserver之间的自定义sql文数据同步 准备工作: JDK(1.8以上,推…

学习vue3第四节(ref以及ref相关api)

主要记录以下api:ref()、isRef()、unref()、 shallowRef()、triggerRef()、customRef() 1、ref() 定义 接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value,.value属性用于追踪并且存…

数据结构 第1章:绪论

文章目录 1. 绪论1.1. 数据结构 1.2. 算法1.2.1. 算法的基本概念1.2.2. 算法的时间复杂度1.2.3. 算法的空间复杂度 1. 绪论 程序 数据结构 算法 1.1. 数据结构 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理…

记录一个Typora激活方法(附软件)!!!

前言 今天想体验Typora上的picList功能,手一抖给版本升级到最新的1.8.10,然后就提示我激活,让我输入序列号,如图所示。接着我就去百度找教程,于是乎就出现了这一篇文章。 教程开始 1、下载最新版 先去官网下载最新…

使用canvas绘制超炫时钟

HTML5 Canvas相当于一个画板,你可以在Canvas绘制任意的东西,今天要分享一款利用HTML5 Canvas绘制的超炫时钟的方法及代码,非常的漂亮,这里推荐给大家 代码地址 使用canvas绘制超炫时钟

R统计学2 - 数据分析入门问题21-40

往期R统计学文章: R统计学1 - 基础操作入门问题1-20 21. 如何对矩阵按行 (列) 作计算? 使用函数 apply() vec 1:20 # 转换为矩阵 mat matrix (vec , ncol4) # [,1] [,2] [,3] [,4] # [1,] 1 6 11 16 # [2,] 2 7 12 17 # [3,] …

Nodejs 第五十四章(net)

net模块是Node.js的核心模块之一,它提供了用于创建基于网络的应用程序的API。net模块主要用于创建TCP服务器和TCP客户端,以及处理网络通信。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,用于…

word中图片位置问题(后续遇到问题再更新)

问题1:图片插入后显示不全 具体表现为:复制黏贴、或者插入图片后,出现插入的图片显示不全,或者不显示。 例如: 这是因为:图片被设定了固定行距 解决方案:ctrl1 效果: 问题2&am…

2024蓝桥杯每日一题(二分)

一、第一题:教室 解题思路:二分差分 对天数进行二分,在ck函数中用差分方法优化多次区间累加。 【Python程序代码】 n,m map(int,input().split()) a [0] list(map(int,input().split())) d,s,t [0]*(m5),[0]*(m5),[0]*(m5) for…

Trust Region Policy Optimization (TRPO)

Trust Region Policy Optimization (TRPO) 是一种强化学习算法,专门设计来改善策略梯度方法在稳定性和效率方面的表现。由 John Schulman 等人在 2015 年提出,TRPO 的核心思想是在策略优化过程中引入一个信任区域(trust region)&a…

unity

Unity官方下载_Unity最新版_从Unity Hub下载安装 | Unity中国官网 Unity Remote - Unity 手册 登陆账号,找到一个3d 免费资源 3D Animations & Models | Unity Asset Store unity 里面window->package Manager 里面可以看到自己的asset ,下载后…

【数据结构】顺序表的定义及实现方式

文章目录 顺序表的定义顺序表的实现静态分配动态分配动态申请内存空间,动态释放内存空间(malloc,free) 顺序表的特点总结 顺序表的定义 顺序表也就是用顺序存储的方式实现线性表。 顺序存储。把逻辑上相邻的元素存储在物理位置上…