OpenCV形态学处理

news2024/11/16 21:46:21

OpenCV形态学处理

  • 1、膨胀
  • 2、腐蚀
  • 3、开/闭运算
  • 4、示例

膨胀、腐蚀、开运算、闭运算

1、膨胀

膨胀就是求局部最大值的操作,膨胀的数学表达式:
dst ⁡ ( x , y ) = max ⁡ ( x ′ , y ′ ) : = 1 ement ⁡ ( x ′ , y ′ ) ≠ 0 src ⁡ ( x + x ′ , y + y ′ ) \operatorname{dst}(x, y)=\max _{\left(x^{\prime}, y^{\prime}\right):=1 \operatorname{ement}\left(x^{\prime}, y^{\prime}\right) \neq 0} \operatorname{src}\left(x+x^{\prime}, y+y^{\prime}\right) dst(x,y)=(x,y):=1ement(x,y)=0maxsrc(x+x,y+y)
核心代码:

//获取自定义核
cv::Mat element = cv::getStructuringElement(MORPH_RECT, Size(5, 5));
//进行膨胀操作
cv::dilate(image, out, element);

2、腐蚀

腐蚀就是求局部最小值的操作,腐蚀的数学表达式:
dst ⁡ ( x , y ) = min ⁡ ( x ′ , y ′ ) : = 1 ement ⁡ ( x ′ , y ′ ) ≠ 0 src ⁡ ( x + x ′ , y + y ′ ) \operatorname{dst}(x, y)=\min _{\left(x^{\prime}, y^{\prime}\right):=1 \operatorname{ement}\left(x^{\prime}, y^{\prime}\right) \neq 0} \operatorname{src}\left(x+x^{\prime}, y+y^{\prime}\right) dst(x,y)=(x,y):=1ement(x,y)=0minsrc(x+x,y+y)
核心代码:

//获取自定义核
cv::Mat element = cv::getStructuringElement(MORPH_RECT, Size(5, 5));
//进行腐蚀操作
cv::erode(image,out, element);

3、开/闭运算

  1. 开运算(Opening Operation),其实就是先腐蚀后膨胀的过程。其数学表达式如下:
     dst  = open ⁡ ( src ⁡ ,  element  ) = dilate ⁡ (  erode  ( src ⁡ ,  element  ) ] \text { dst }=\operatorname{open}(\operatorname{src}, \text { element })=\operatorname{dilate}(\text { erode }(\operatorname{src}, \text { element })]  dst =open(src, element )=dilate( erode (src, element )]
    开运算可以用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
  2. 先膨胀后腐蚀的过程称为闭运算(Closing Operation),其数学表达式如下:
     dst  = close ⁡ ( src ⁡ ,  element  ) = erode ⁡ (  dilate ( src ⁡ ,  element  ) ] \text { dst }=\operatorname{close}(\operatorname{src}, \text { element })=\operatorname{erode}(\text { dilate}(\operatorname{src}, \text { element })]  dst =close(src, element )=erode( dilate(src, element )]
    闭运算能够排除小型黑洞(黑色区域)
  3. 闭运算核心代码:
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, Size(3, 3));
cv::Mat result;
cv::morphologyEx(test, result, cv::MORPH_CLOSE, element);
  1. 开运算核心代码:
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, Size(3, 3));
cv::Mat result;
cv::morphologyEx(test, result, cv::MORPH_OPEN, element);

4、示例

原始图像:
在这里插入图片描述
闭运算后:
在这里插入图片描述

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

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

相关文章

搭建mysql主从复制

前言: 👏 作者简介:我是笑霸final,一名热爱技术的在校学生。 📝 个人主页:个人主页1 || 笑霸final的主页2 📕 系列专栏:数据库 📧 如果文章知识点有错误的地方&#xff0…

缺失数据的处理

1:方括号里写数组,是对行进行操作,方括号里写字符串,是对列进行操作 dfdf.sort_values(byCount_AnimalName,ascendingFalse) #print(df.head(5)) print(df[:20]) print(df[Row_Labels]) print(type(b))2:t3.loc(定位取…

程序的编译与链接(预处理详解)+百度面试笔试题+《高质量C/C++编程指南》笔试题

本篇重点介绍程序的编译与链接过程中的预处理阶段,将详细的介绍在预处理阶段会发生什么,以及讲解有关百度该内容的面试笔试题和源于《高质量C/C编程指南》的笔试题。一.【预处理详解】①预定义符号②#define2.1 #define 定义标识符注意:2.2 #…

常见的EMC问题

电磁兼容设计的目的就在于满足产品功能要求、减少调试时间,使产品满足电磁兼容标准的要求,并且使产品不会对系统中的其它设备产生电磁干扰。 电磁兼容设计中常见的问题有哪些? 1、电磁兼容设计可以从电路设计(包括器件选择&…

69. open函数—打开文件并返回文件对象

69. open函数—打开文件并返回文件对象 文章目录69. open函数—打开文件并返回文件对象1. open() 函数的作用2. open函数语法参考3. open()函数参数说明1. file参数2. encoding 参数3. errors参数4. mode参数4. mode参数详解1. 准备工作2. w 写入模式3. a 追加模式4. r 只读模式…

RabbitMQ学习总结(10)—— RabbitMQ如何保证消息的可靠性

一、丢失场景 RabbitMQ丢失的以下3种情况: (1)生产者:生产者发送消息至MQ的数据丢失

布隆过滤器的使用

目录说明使用布隆过滤器使用测试Java 本地使用布隆过滤器Java集成Redis使用布隆过滤器说明 布隆过滤器是用来防止缓存穿透的,我们需要知道如何使用布隆过滤器。 使用 Google 的 Guava 库提供了使用布隆过滤器的 API 类(BloomFilter.class)&…

ubuntu 创建raid5教程

1、查看磁盘:parted -l 2、安装创建raid工具mdadm: sudo apt install mdadm 3、创建命令: sudo mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb /dev/sdc /dev/sdd 说明: -Cv: 创建一个阵列并打印出详细信息 /dev/md0: 阵列名称 -l5: 指定阵列类型为 R…

Linux管道排序命令:sort、wc、uniq

sort 它可以根据不同的数据形式来排序,例如数字与文字的排序就不一样。此外,排序的字符与语系的编码有关,因此我们需要排序时,建议使用LANGC来让与系统统一,数据排序比较好一些 sort 【-fbMnrtuk】【file or stdin】 …

java: 错误: 不支持发行版本 5(快速解决办法)

目录 前言 一、出现报错 二、报错的原因 三、解决办法 四、解决成功 前言 在maven web项目上面要部署运行tomcat时候,会出现这个问题 一、出现报错 java: 错误: 不支持发行版本 5 二、报错的原因 (1)官方解释:这个错误…

解决1130-Host‘ ‘is not allowed to connect to this MySQL server,实现远程连接本地数据库

在使用Navicat远程连接本地数据库时,遇到了这样一个问题,我使用 本地主机的地址,连接本地的数据库,报错host ‘’ is not allowed to connect to this mysql server。上网上查了一下资料,原来自己安装在本地的mysql默认…

Netty 学习笔记——概念篇

Netty Home Netty GitHub Netty简介 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 也就是说,Netty 是一个…

Java——聊聊JUC中的ThreadLocal

文章目录: 1.什么是ThreadLocal? 1.1 api介绍 1.2 最简单的案例认识ThreadLocal 1.3 线程池结合ThreadLocal案例 2.Thread &ThreadLocal & ThreadLocalMap 3.ThreadLocal内存泄漏问题 3.1 四大引用之强引用 3.2 四大引用之软引用 3.3 四…

cs285学习笔记

文章目录lec1ML和RL之间的区别几种RL分类current challengeslec4markov chainmarkov decision processpartially observed markov decision processRLs goalQ & Alec1 ML和RL之间的区别 mlrliid data数据不iid,前面的数据会影响future input训练时有确定的gro…

搜索二叉树

文章目录二叉搜索树模拟实现InsertInsertR()EraseEraseR搜索树的价值实现代码二叉搜索树 在二叉树的基础之上, 左子树的值都比根节点小,右子树都更大。那么他的左右子树也分别叫做二叉搜索树。 查找一个节点,最多查找高度次(建立在这个树是比较均衡的).10亿里面找…

Shennina:一款带有人工智能的自动化主机渗透工具

关于Shennina Shennina是一款功能强大的自动化主机渗透/漏洞利用框架,该项目的主要目的是使用人工智能技术来实现安全扫描、漏洞扫描/分析和漏洞利用开发的完全自动化。Shennina整合了Metasploit和Nmap这两款强大的网络安全工具实现其部分功能,并执行渗…

微搭使用笔记(二)微搭低代码平台介绍及基础使用

概述 官网地址: 官网 官方文档: 官方文档 FAQ: FAQ 腾讯云微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。支持打通企业内部数据,轻松实现企业微信管理、工…

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4)

别具一格,独此一家,原创唯美浪漫情人节表白专辑 不一样的惊喜哦~!(html5,css3,svg)表白爱心代码(复制就可用)(4) 目录 款式四:时光的记忆款 1、拷贝完整源代码 2、更新时光盒所…

Springboot使用MDC进行日志追踪

Springboot使用MDC进行日志追踪前言一、为什么要跟踪日志二、MDC存储日志原理三、开始代码1、封装MDC工具类2、注册日志追踪拦截器四、配置logBack五、查看追踪效果六、要解决traceId传递问题1、在不同线程之间的传递2、远程调用时候的传递总结前言 MDC(Mapped Diag…

基于ChatGPT +Node.js的基本使用

一、简介 最近,围绕ChatGPT和OpenAI的话题是层出不穷,国内外的技术工作者都掀起了一股学习OpenAI的技术浪潮,甚至有很多的媒体预测OpenAI将会带来行业的革命,而国外一些大的企业也将OpenAI视为重要的竞争对手,比如Google和微软。 事实上,OpenAI 可以应用于任何涉及理解…