OpenCV 形态学相关函数详解及用法示例
OpenCV形态学相关的运算包含腐蚀(MORPH_ERODE),膨胀(MORPH_DILATE),开运算(MORPH_OPEN),闭运算(MORPH_CLOSE),梯度运算(MORPH_GRADIENT),顶帽运算(MORPH_TOPHAT),黑帽运算(MORPH_BLACKHAT),击中击不中变换(MORPH_HITMISS)。
erode()函数
erode()函数执行的是腐蚀运算,其原型如下:

erode()通过使用特定的结构元素(如矩形、圆形等)来处理图像。在某个像素上应用结构元素时,结构元素的锚点与该像素对齐,所有与结构元素相交的像素就包含在当前集合中,腐蚀就是把当前像素替换成所定义像素集合中的最小像素值。即:

因此,腐蚀可去除图像中小的噪点,用于图像滤波,腐蚀后物体尺寸会缩小。
函数参数:
src 输入图像;通道的数量可以是任意的,但深度应为CV_8U、CV_16U、CV_36S、CV_32F或CV_64F之一。
dst 输出图像其大小与类型与源图像相同。
kernel 用于腐蚀操作的结果元素(内核),如果element=Mat(),则使用3 x 3矩形结构元素。内核可以使用getStructuringElement创建。
anchor 锚点在结构元素(kernel)内的位置;默认值(-1,-1)表示锚点位于元素中
心。
iteration 应用腐蚀操作的次数。
borderType 像素外推方法,请参见边界类型。不支持BORDER_WRAP。边界类型如下:

borderValue 恒定边界情况下的边界值。
dilate()函数
dilate()函数执行膨胀操作,其原型如下:

dilate()也是通过使用特定的结构元素(如矩形、圆形等)来处理图像。在某个像素上应用结构元素时,结构元素的锚点与该像素对齐,所有与结构元素相交的像素就包含在当前集合中,腐蚀就是把当前像素替换成所定义像素集合中的最大像素值。即:

膨胀操作,物体尺寸会变大,可使物体中的小减小填满。
函数参数:
src 输入图像;通道的数量可以是任意的,但深度应为CV_8U、CV_16U、CV_36S、CV_32F或CV_64F之一。
dst 输出图像其大小与类型与源图像相同。
kernel 用于膨胀操作的结构元素(内核),如果element=Mat(),则使用3 x 3矩形结构元素。内核可以使用getStructuringElement创建。
anchor 锚点在结构元素(kernel)内的位置;默认值(-1,-1)表示锚点位于元素中心。
iteration 应用膨胀操作的次数。
borderType 像素外推方法,请参见边界类型。不支持BORDER_WRAP。边界类型如下:

borderValue 恒定边界情况下的边界值。
图像的开运算/闭运算
开运算和闭运算的定义只与基本的腐蚀和膨胀运算有关:闭合的定义是对图像先膨胀后腐蚀,开启的定义是对图像先腐蚀后膨胀。要实现开运算/闭运算可分别调用腐蚀与膨胀函数,也可以调用OpenCV形态学函数morphologyEx(),morphologyEx()的原型如下:

函数morphology Ex()使用侵蚀和膨胀作为基本操作来执行高级形态转换。
函数参数:
src 输入图像;通道的数量可以是任意的,但深度应为CV_8U、CV_16U、CV_36S、CV_32F或CV_64F之一。
dst 输出图像其大小与类型与源图像相同。
Op 形态学操作的类型,请参见MorphTypes:

kernel 用于膨胀操作的结构元素(内核),如果element=Mat(),则使用3 x 3矩形结构元素。内核可以使用getStructuringElement创建。
anchor 锚点在结构元素(kernel)内的位置;默认值(-1,-1)表示锚点位于元素中心。
iteration 应用膨胀操作的次数。
borderType 像素外推方法,请参见边界类型。不支持BORDER_WRAP。边界类型如下:

borderValue 恒定边界情况下的边界值。
梯度运算
形态学梯度运算实质上是膨胀与腐蚀结果相减:

顶帽/黑帽
顶帽运算的实质是源图像与开运算结果相减:

黑帽运算实质是闭运算的结果减去与图像:

示例:
新建一个控制台应用程序Project,在源程序中加入如下代码:
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat src = imread("2.bmp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src", src);Mat src1 = src;Mat src2 = src;Mat tem;Mat element(5, 5, CV_8U, Scalar(1));//erodeerode(src, tem, element,Point(-1,-1),1);imshow("Erode Result", tem);//dilatedilate(src, tem, element, Point(-1, -1), 1);imshow("Dilate Result", tem);//erode +dilateerode(src, tem, element, Point(-1, -1), 1);dilate(tem, tem, element, Point(-1, -1), 1);imshow("Erode + dilate Result", tem);//dilate + erodedilate(src1, tem, element, Point(-1, -1), 1);erode(tem, tem, element, Point(-1, -1), 1);imshow("Dilate + erode Result", tem);//openmorphologyEx(src1, tem, MORPH_OPEN, element);imshow("Open Result", tem);//closemorphologyEx(src1, tem, MORPH_CLOSE, element);imshow("CLOSE Result", tem);src2 = imread("3.bmp");if (src.empty()){cout << "Cann't open image!" << endl;return -1;}imshow("Src2", src2);//top hatmorphologyEx(src2, tem, MORPH_TOPHAT, element);imshow("Top hat", tem);//Black hatmorphologyEx(src2, tem, MORPH_BLACKHAT, element);imshow("Black hat", tem);waitKey(0);}
试运行,结果如下:

相关文章:
OpenCV 形态学相关函数详解及用法示例
OpenCV形态学相关的运算包含腐蚀(MORPH_ERODE),膨胀(MORPH_DILATE),开运算(MORPH_OPEN),闭运算(MORPH_CLOSE),梯度运算(MORPH_GRADIENT),顶帽运算(MORPH_TOPHAT),黑帽运算(MORPH_BLACKHAT),击中…...
Kafka学习笔记(三)Kafka分区和副本机制、自定义分区、消费者指定分区
文章目录 前言7 分区和副本机制7.1 生产者分区写入策略7.1.1 轮询分区策略7.1.2 随机分区策略7.1.3 按key分区分配策略7.1.4 自定义分区策略7.1.4.1 实现Partitioner接口7.1.4.2 实现分区逻辑7.1.4.3 配置使用自定义分区器7.1.4.4 分区测试 7.2 消费者分区分配策略7.2.1 RangeA…...
华为 HCIP-Datacom H12-821 题库 (31)
🐣博客最下方微信公众号回复题库,领取题库和教学资源 🐤诚挚欢迎IT交流有兴趣的公众号回复交流群 🦘公众号会持续更新网络小知识😼 1. 默认情况下,IS-IS Level-1-2 路由器会将 Level-2 区域的明细路由信息发布到Lev…...
占位,凑满减
占位,凑满减...
SpringBoot校园资料平台:从零到一的构建过程
1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...
czx前端
一、盒模型 标准盒模型:box-sizing: content-box。 外边距边框内边距内容区。 IE盒模型,怪异盒模型:box-sizing: border-box。 外边距内容区(边框内边距内容区)。 二、CSS特性 继承性: 父元素的字体大小…...
Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略
日前,Perforce携手合作伙伴龙智一同亮相Unreal Fest 2024上海站,分享Helix Core版本控制系统及其协作套件的强大功能与最新动态,助力游戏创意产业加速前行。 Perforce解决方案工程师Kory Luo在活动主会场,带来《Perforce Helix C…...
【含文档】基于Springboot+Andriod的成人教育APP(含源码+数据库+lw)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...
CentOS7系统配置Yum环境
新安装完系统的服务器往往缺少我们常用的依赖包,故需要设置好yum源,方便软件安装,以下是CentOS7为例,系统安装后yum默认安装。 //备份之前的配置文件 mv /etc/yum.repos.d /etc/yum.repos.d.bak mkdir -p /etc/yum.repos.d 1…...
pyqt打包成exe相关流程
1、首先是安装pyinstaller, 在cmd中输入以下安装命令: pip3 install pyinstaller -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/ 2、安装完毕之后,下一步就是找到你要打包的工程,打包的logo放置如下位置: 3、将log…...
设计模式、系统设计 record part02
软件设计模式: 1.应对重复发生的问题 2.解决方案 3.可以反复使用 1.本质是面向对象 2.优点很多 1.创建型-创建和使用分离 2.结构型-组合 3.行为型-协作 571123种模式 UML-统一建模语言-Unified Modeling Language 1.可视化,图形化 2.各种图(9…...
github双重验证(2FA)启用方法
一、双重验证-2FA 在去年看到过说github启用双重验证的通知,觉得做为一个普通开发者,可能没有这么快会要求启用。结果,今天早晨一来就收到了邮件,要求说在11月底完成2FA的认证,否则权限受限。真是无了语。所谓2FA好理…...
《Linux从小白到高手》理论篇:Linux的系统服务管理
值此国庆佳节,深宅家中,闲来无事,就多写几篇博文。本篇详细深入介绍Linux的系统服务管理。 系统服务通常在系统启动时自动启动,并在后台持续运行,为系统和用户提供特定的功能。例如,网络服务、打印服务、数…...
SQL中如何进行 ‘’撤销‘’ 操作-详解
在 SQL 中,撤销已经执行的操作通常涉及两个主要的概念:事务控制和回滚操作。 ### 1. 事务控制 在支持事务的数据库管理系统(如 MySQL 的 InnoDB 引擎)中,您可以使用事务来确保数据的完整性。事务可以确保一系列的操作…...
Hadoop之WordCount测试
1、Hadoop简介: Hadoop是Apache旗下的一个用Java语言实现的开源软件框架,是一个开发和运行处理大规模数据的软件平台。 Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和MapReduce编程模型。HDFS是一个高度容错的系统…...
Vue和axios零基础学习
Vue的配置与项目创建 在这之前要先安装nodejs 安装脚手架 官网 Home | Vue CLI (vuejs.org) 先运行,切换成淘宝镜像源,安装速度更快 npm config set registry http://registry.npm.taobao.org 创建项目 用编译器打开一个空文件,在终端输入…...
STM32新建工程-基于库函数
目录 一、创建一个新工程 二、为工程添加文件和路径 三、创建一个main.c文件,并调试 四、修改一些配置 五、用库函数进行写程序 1、首先加入一些库函数和头文件 2、编写库函数程序 一、创建一个新工程 我这里选择STM32F103C8的型号,然后点击OK。 …...
matlab入门学习(二)矩阵、字符串、基本语句、函数
一、矩阵 1、矩阵生成 %矩阵生成%直接法 A[1,2,3; 4,5,6; 7,8,9]%冒号一维矩阵:开始,步长,结束(步长为1时可以省略) B1:1:10 B1:10 %函数法%linspace(开始,结束,元素个数),等差生成…...
PC端微信小程序如何调试?
向往常一样运行开微信小程序开发者工具 如果只弹出pc端小程序,没有出现调试的界面:点击胶囊按钮的三个…选择重新进入小程序 即可依次展开相应的功能调试,改完代码没反应再刷新看看,再没反应就再次重新点击编译并自动调试。...
点击按钮提示气泡信息(Toast)
演示效果: 目录结构: activity_main.xml(布局文件)代码: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:…...
别再手动算稳心了!用Maxsurf Stability模块,从Rhino模型到结果曲线保姆级教程
从Rhino到Maxsurf Stability:船舶稳性分析的智能化工作流实践 船舶设计领域的技术迭代正在悄然改变传统工作模式。记得三年前参与某型游艇设计项目时,团队还在用Excel表格手动计算稳性参数,每次修改船型都意味着重新推导整套公式。直到接触Ma…...
JavaQuestPlayer终极指南:5大核心功能让你的QSP游戏开发与运行变得简单高效
JavaQuestPlayer终极指南:5大核心功能让你的QSP游戏开发与运行变得简单高效 【免费下载链接】JavaQuestPlayer 项目地址: https://gitcode.com/gh_mirrors/ja/JavaQuestPlayer 还在为QSP游戏的跨平台兼容性而烦恼吗?还在为游戏开发调试效率低下而…...
VSLAM与VIO技术解析:从3D建图到重定位的工程实践
1. 项目概述:从传感器融合到环境认知的跨越在机器人、自动驾驶和增强现实这些前沿领域,让机器“看见”并“理解”它所处的三维世界,是赋予其自主行动能力的基石。这背后,视觉SLAM(Simultaneous Localization and Mappi…...
TrollInstallerX终极指南:iOS 14-16.6.1设备一键安装TrollStore
TrollInstallerX终极指南:iOS 14-16.6.1设备一键安装TrollStore 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX是一款专为iOS 14.0到16.6.1…...
Rust 服务器存档管理 地图配置指南
对于想要自建游戏服务器的玩家,云鸢互联是一个不错的专业联机平台选择。它提供稳定、低延迟且724小时在线的服务器环境,助你轻松打造专属游戏世界。平台主打极致的新手友好——全图形化控制面板,无需编写代码,也无需掌握Linux命令…...
汽车零部件企业 ERP 推荐清单:聚焦智能制造与供应链协同方案
汽车零部件制造业作为汽车产业的核心支撑,正经历着前所未有的变革压力。新能源汽车渗透率突破50%、主机厂JIT(准时制)交付要求日益严苛、全球化供应链波动加剧,这些趋势共同推动行业进入智能制造与供应链深度协同的新阶段。在此背…...
DocQuery最佳实践:企业文档自动化处理的10个技巧
DocQuery最佳实践:企业文档自动化处理的10个技巧 【免费下载链接】docquery An easy way to extract information from documents 项目地址: https://gitcode.com/gh_mirrors/do/docquery DocQuery是一款强大的文档信息提取工具,能轻松分析半结构…...
保姆级教程:用HackRF One复现汽车钥匙重放攻击(附完整命令与避坑点)
从零掌握HackRF One信号重放:433MHz汽车钥匙实战全解析 当你在停车场按下车钥匙按钮时,那串看似神秘的无线电波背后隐藏着怎样的安全漏洞?作为硬件安全领域的入门神器,HackRF One让普通爱好者也能窥探射频世界的奥秘。本文将带你用…...
通勤便携首选:2026电脑推荐笔记本,日常出行无负担
对于每天往返于家和公司、背着电脑挤地铁公交的职场人来说,挑选笔记本的核心诉求愈发清晰,既要机身轻薄便携,不会给通勤增加额外负担,又要性能够用,多开办公软件、线上会议不卡顿,还要续航持久,…...
从CVE到ATTCK:如何用Elastic Stack构建你的个人安全情报仪表盘
从CVE到ATT&CK:如何用Elastic Stack构建你的个人安全情报仪表盘 在安全运营领域,数据孤岛一直是分析师面临的主要挑战。CVE漏洞数据库、CWE弱点分类、CAPEC攻击模式以及ATT&CK框架各自提供了宝贵的安全情报,但这些数据往往分散在不同…...
