OpenCV之形态学操作

news2024/9/22 3:29:24

形态学操作包含以下操作:

  • 腐蚀 (Erosion)
  • 膨胀 (Dilation)
  • 开运算 (Opening)
  • 闭运算 (Closing)
  • 形态梯度 (Morphological Gradient)
  • 顶帽 (Top Hat)黑帽(Black Hat)

其中腐蚀和膨胀操作是最基本的操作,其他操作由这两个操作变换而来。

腐蚀

        用一个结构元素扫描图像中每一个像素,结构元素中的每一个像素与其覆盖像素与操作,都为1,则该像素为1,否则为0,腐蚀的作用是消除物体边界点,消除小于结构元素的噪声点。

void erode( InputArray src, OutputArray dst, InputArray kernel,
            Point anchor = Point(-1,-1), int iterations = 1,
            int borderType = BORDER_CONSTANT,
            const Scalar& borderValue = morphologyDefaultBorderValue() );

src,dst:输入输出图像,可以相同;

kernel:结构元素,一般使用Ma来确定结构元素;

anchor:结构元素的描点;

iterations:操作次数;

borderType:边界类型;

borderValue:边界值,当borderType=BORDER_CONSTANT时有效;

实例:

    Mat kernal = Mat::ones(3,3,CV_8UC1);
    kernal.at<uchar>(0,1) = 0;
    kernal.at<uchar>(1,1) = 0;
    kernal.at<uchar>(2,1) = 0;
    cv::erode(_src,_src,kernal,Point(-1,-1),3);

                                                                        原始图像 

 

                                                                        腐蚀图像 

膨胀

void dilate( InputArray src, OutputArray dst, InputArray kernel,
            Point anchor = Point(-1,-1), int iterations = 1,
            int borderType = BORDER_CONSTANT,
            const Scalar& borderValue = morphologyDefaultBorderValue() );

参数意义与腐蚀完全相同

实例

    Mat kernal = Mat::ones(3,3,CV_8UC1);
    kernal.at<uchar>(1,0) = 0;
    kernal.at<uchar>(1,1) = 0;
    kernal.at<uchar>(1,2) = 0;
    cv::dilate(_src,_src,kernal,Point(-1,-1),3);

膨胀图像

开运算

        开运算是先腐蚀后膨胀,作用是分离物体,消除小区域,消除噪点,而不影响原来图像

morphologyEx( InputArray src, OutputArray dst,
              int op, InputArray kernel,
              Point anchor = Point(-1,-1), int iterations = 1,
              int borderType = BORDER_CONSTANT,
              const Scalar& borderValue = morphologyDefaultBorderValue() );

其中op设置为MORPH_OPEN

实例:

Mat kernal = Mat::ones(3,3,CV_8UC1);
cv::morphologyEx(src,src,MORPH_OPEN,kernal,Point(-1,-1),2);

原图:

开运算后的图像:

 闭运算

闭运算是先膨胀后腐蚀,作用是消除闭合物体里面的孔洞,可以填充闭合区域。

morphologyEx( InputArray src, OutputArray dst,
              int op, InputArray kernel,
              Point anchor = Point(-1,-1), int iterations = 1,
              int borderType = BORDER_CONSTANT,
              const Scalar& borderValue = morphologyDefaultBorderValue() );

其中op设置为MORPH_CLOSE

形态梯度

        膨胀图与腐蚀图之差,能够保留物体的边缘轮廓。

 cv.morphologyEx(img,cv.MORPH_TOPHAT)

礼帽运算

        原图像与开运算的结果差,开运算放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,操作和选择的核的大小相关。礼帽运算用来分离比邻近点亮一些的斑块。 当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

 cv.morphologyEx(img,cv.MORPH_TOPHAT)

黑帽运算

        闭运算的结果图与原图像之差,闭运算填充了裂缝或者扩大局部高亮度的区域,因此,从结果图中减去原图后,得到的效果图突出了比原图区域更暗的区域,且这一操作和选择的核的大小相关,黑帽运算用来分离比邻近点暗一些的斑块。

 cv.morphologyEx(img,cv.MORPH_BLACKHAT)

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

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

相关文章

谷歌Chrome庆祝15周年,推出全新设计!了解最新信息!

谷歌浏览器本月将满15岁&#xff0c;为了纪念这一时刻&#xff0c;它正在进行改造和升级。 这一点意义重大&#xff0c;因为Chrome在全球有数十亿人使用&#xff0c;因此谷歌所做的每一项改变都会对互联网以及这些人与互联网的互动方式产生巨大影响。即使你不使用Chrome或不关…

深入了解HTTP代理的工作原理

HTTP代理是一种常见的网络代理方式&#xff0c;它可以帮助用户隐藏自己的IP地址&#xff0c;保护个人隐私和安全。了解HTTP代理的工作原理对于使用HTTP代理的用户来说非常重要。本文将深入介绍HTTP代理的工作原理。 代理服务器的作用 HTTP代理的工作原理基于代理服务器的作用。…

一文讲透【静态脱敏实操】

1&#xff1a;直接上工具类 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version> </dependency>2:Hutool 支持的脱敏数据类型 现阶段最新版本的 Hutool 支持的脱敏数据类…

浅析目标检测入门算法:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4

本文致力于让读者对以下这些模型的创新点和设计思想有一个大体的认识&#xff0c;从而知晓YOLOv1到YOLOv4的发展源流和历史演进&#xff0c;进而对目标检测技术有更为宏观和深入的认知。本文讲解的模型包括&#xff1a;YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4…

LaTeX总结-2023年9月8日

1. LaTeX总结 文章目录 1. LaTeX总结1.1. 定义作者&#xff0c;通讯作者&#xff0c;地址&#xff0c;宏包1.1.1. Example 11.1.2. Example 21.1.3. 特殊符号——作者标注注 1.2. 调整字体1.2.1. 数学模式下使用正体1.2.2. LaTeX内使用中文1.2.3. 正文文字 1.3. 常用符号及字母…

java - lua - redis 完成商品库存的删减

java调用lua脚本完成对商品库存的管理 主页链接 微风轻吟挽歌的主页 如若有帮助请帮忙点赞 //lua脚本 获取到内存不够的商品StringBuilder sb new StringBuilder();//定义一个数组存储可能缺少库存的值sb.append(" local table {} ");//获取值sb.append(" …

Java中的内部类

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;什么是内部类&#x1f415;内部类的分类&#x1f9f8;成员内部类&#x1f9f8;静态内部类&#x1f9f8;局部内部类&#x1f9f8;匿名内部类 &#x1f415;内部类的特点&a…

navicat设置mysql自动根据插入时间更新时间

使用navicat时间字段要素根据当前数据插入时间自动填充&#xff0c;可设置now()函数

CentOS 8 通过YUM方式升级最新内核

CentOS 8 通过YUM方式升级最新内核 查看当前内核 uname -r 4.18.0-193.6.3.el8_2.x86_64导入 ELRepo 仓库的公钥&#xff1a; rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org安装升级内核相关的yum源仓库(安装 ELRepo 仓库的 yum 源) yum install https://www…

栈和队列的概念及实现

文章目录 一、栈1.栈的概念2.数组作为顺序栈存储方式特点3.链栈特点4.代码实现栈(1).Stack.h(2).Stack.c(3).Test.c 二、队列2.区分顺序存储的队空和队满的三种处理方式3.代码实现(1).Quene.h(2).Quene.c 一、栈 1.栈的概念 栈的本质就是线性表&#xff0c;但它和队列一样&…

Nginx 学习(九)集群概述与LVS工作模式的配置

一 集群 1 概述 通过高速网络将很多服务器集中起来一起提供同一种服务&#xff0c;在客户端看来就像是只有一个服务器可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益任务调度是集群系统中的核心技术 2 目的 提高性能。如计算密集型应用&…

记LGSVL Map Annotation使用

导入点云 内置的点云导入器工具提供了将最流行的点云文件格式&#xff08;PCD、PLY、LAS、LAZ&#xff09;转换为可用于仿真的数据所需的所有功能。 要访问点云导入器窗口&#xff0c;请在 Unity 编辑器中打开模拟器项目&#xff0c;然后导航到 Simulator/Import Point Cloud…

java 前缀树的实现,敏感词的匹配和标记

目录 一、前缀树的介绍和定义1.前缀树的定义2.前缀树的结构 二、前缀树的实现1.向前缀树中增加词语2.向前缀树中删除词语3.对于使用前缀树进行词语标识&#xff1a;4.前缀树的实现代码 三、前缀树使用及测试1.向前缀树上增加词语2.根据输入匹配前缀树上的词语3.判断前缀树上是否…

Java 基于SpringBoot+Vue的社区医院管理系统的实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1、效果演示2、 前言介绍3. 技术栈4系统设计4.1数据库设计4.2系统整体设计4.2.1 系统设计思想4.2.…

加拿大CCPSA-SOR/2016-152(婴儿床、摇篮和婴儿摇篮法规)认证要求解答

亚马逊加拿大站儿童床垫CCPSA认证: ●SOR/2016-152&#xff08;婴儿床、摇篮和婴儿摇篮法规&#xff09; ●SOR/2018-83&#xff08;含铅消费品法规&#xff09; ●SOR/2016-193&#xff08;表面涂层材料法规 - 铅&#xff09; ●SOR/2016-188&#xff08;邻苯二甲酸盐&…

大漠插件普通定制版内存调用与com对象调用方法

首先.打开大漠类库生成工具.拖入定制版的dll文件会生成各个语言的调用例子 如下图所示 详见视频教程 大漠插件普通定制版内存调用与com对象调用方法

qt作业day5

//客户端&#xff0c;#include "tcpcli.h" #include "ui_tcpcli.h"TcpCli::TcpCli(QWidget *parent) :QWidget(parent),ui(new Ui::TcpCli) {ui->setupUi(this);//给客户端指针实例化对象cli_sock new QTcpSocket(this);ui->discntBtn->setEnabl…

Docker的运行机制和底层技术简介

&#xff08;笔记总结自《微服务架构基础》书籍&#xff09; 一、Docker的引擎 Docker Engine&#xff08;Docker引擎&#xff09;是Docker的核心部分&#xff0c;使用的是客户端-服务器&#xff08;C/S&#xff09;架构模式&#xff1a; ①Docker Cli&#xff1a;Docker命令…

金融工程学学习笔记第一章

第一章 金融工程概述 什么是金融工程 金融工程的含义 金融工程&#xff1a; 金融工程&#xff1a;一门融现代金融学、数理和工程方法与信息技术与一体的新兴交叉型学科。 工程是指以某种设想的目标为依据&#xff0c;应用有关科学知识和技术手段&#xff0c;通过有组织的一…