OpenCV(二十九):图像腐蚀

1.图像腐蚀原理

        腐蚀操作的原理是将一个结构元素(也称为核或模板)在图像上滑动,并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配,那么该位置的像素值保持不变。如果结构元素的任何一个像素与图像中对应位置的像素不匹配,那么该位置的像素值被置为0(或其他指定的像素值),从而改变了图像的形状和结构。

2.图像腐蚀目的: 

  • 去除图像中微小物体
  • 分离较近的两个物体

3.结构元素生成函数getStructuringElement()

Mat cv::getStructuringElement ( int  shape,

Size   ksize,

Point anchor = point(-1,-1)

  • shape:结构元素的种类。
  • ksize:结构元素的尺寸大小。
  • anchor:中心点的位置,默认参数为结构元素的几何中心点。

其中结构元素的类型参数:

4.图像腐蚀操作函数erode()

void cv::erode ( InputArray  src,

OutputArray    dst,

InputArray     kernel,

Point          anchor = Point(-1,-1),

int                iterations = 1,

int               cborderType = BORDER CONSTANT,

const Scalar & borderValue = morphologyDefaultBorderValue()

)

  • src:输入的待腐蚀图像,图像的通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV _16U,CV_16S,CV_32F或CV_64F之一。
  • dst:腐蚀后的输出图像,与输入图像src具有相同的尺寸和数据类型。
  • kermel:用于腐蚀操作的结构元素,可以自己输入,也可以用getStructuringElement0)函数生成。
  • anchor:中心点在结构元素中的位置,默认参数为结构元素的几何中心点。
  • iterations:腐蚀的次数。
  • borderType:像素外推法选择标志。
  • borderValue:边界不变的边界值。

5.示例代码:

//绘制包含区域函数
void drawState(Mat image, int number, Mat centroids, Mat stats, String string) {RNG rng(10086);vector<Vec4b> colors;for(int i=0;i<number;i++){//使用均匀分布的随机数确定颜色Vec4b vec4=Vec4b(rng.uniform(0,256),rng.uniform(0,256),rng.uniform(0,256),rng.uniform(0,256));colors.push_back(vec4);}//以不同颜色标记出不同的连通域for(int i=1;i<number;i++){//中心位置int center_x=centroids.at<double>(i,0);int center_y=centroids.at<double>(i,1);//矩形边框int x=stats.at<int>(i,CC_STAT_LEFT);int y=stats.at<int>(i,CC_STAT_TOP);int w=stats.at<int>(i,CC_STAT_WIDTH);int h=stats.at<int>(i,CC_STAT_HEIGHT);int area=stats.at<int>(i,CC_STAT_AREA);//中心位置绘制circle(image,Point(center_x,center_y),2,Scalar(0,255,0),2,8,0);//外接矩形Rect rect(x,y,w,h);rectangle(image,rect,colors[i],1,8,0);putText(image, format("%d",i),Point(center_x,center_y),FONT_HERSHEY_SIMPLEX,0.5,Scalar(255,0,255),1);}imwrite("/sdcard/DCIM/"+string+".png",image);
}void Image_corrosion(Mat image){Mat img2;copyTo(image,img2,image);//克隆一个单独的图像,用于后期图像绘制Mat rice,riceBW;//将图像转成二值图像,用于统计连通域cvtColor(image,rice,COLOR_BGR2GRAY);threshold(rice,riceBW,50,255,THRESH_BINARY);Mat out,stats,centroids;//统计图像中连通域的个数int number= connectedComponentsWithStats(riceBW,out,stats,centroids,8,CV_16U);drawState(image,number,centroids,stats,"Uncorroded_connected");//绘制图像Mat strucr1= getStructuringElement(0,Size(3,3));//矩形结构元素//Mat strucr1= getStructuringElement(1,Size(3,3));//十字结构元素erode(riceBW,riceBW,strucr1);//对图像进行腐蚀number= connectedComponentsWithStats(riceBW,out,stats,centroids,8,CV_16U);drawState(img2,number,centroids,stats,"corroded_connected");
}

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

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

相关文章

[通用]计算机经典面试题基础篇Day3

[通用]计算机经典面试题基础篇Day3 1、请说明mysql的两种主要引擎 MySQL有多种存储引擎&#xff0c;但最常见的两种主要引擎是InnoDB和MyISAM。 2、说一下mysql这两种引擎的使用场景 MySQL的两种主要引擎&#xff0c;InnoDB和MyISAM&#xff0c;各自适用于不同的使用场景&…

利用python进行视频下载并界面播放快速下载素材

工具&#xff1a;python designer&#xff08;python自带&#xff09;:UI界面设计工具 VLC&#xff1a;视频播放工具 需要的库如下&#xff1a; import os,platform os.environ[PYTHON_VLC_MODULE_PATH] "./vlc-3.0.14" import vlc from 脚本 import Player from …

通过位运算打多个标记

通过位运算打多个标记 如何在一个字段上&#xff0c;记录多个标记&#xff1f; 如何在一个字段上&#xff0c;记录不同类型的多个标记&#xff1f; 如何用较少的字段&#xff0c;记录多个标记&#xff1f; 如何在不增加字段的要求下&#xff0c;记录新增的标记&#xff1f; 在实…

Oracle数据库连接之TNS-03505_无法解析服务名异常

在进行数据库开发的时候&#xff0c;通常需要连接Oralce数据库&#xff0c;在进行连接时&#xff0c;经常性的会提示TNS-03505: Failed to resolve name&#xff08;无法解析服务名&#xff09;&#xff0c;从而导致无法连接到数据库实例&#xff0c;那么通过本文对造成该问题的…

SpringMVC之文件上传下载以及jrebel的使用

目录 一、文件上传 1.1 导入依赖 1.2 配置文件上传解析器 1.3 配置服务器存放文件地址 1.3.1 点击编辑Configurations 1.3.2 将项目部署至tomcat服务器上 1.3.3 配置相对路径 1.4 导入PropertiesUtil工具类 1.5 编写resource.properties 1.6 添加sql 1.7 编写PageCo…

GIT高级使用技巧

GIT高级使用技巧 导出GIT日志到文件 按照 <哈希> - <作者名> <作者邮箱地址> - <作者日期> : <commit描述> 的格式导出日志 git log --prettyformat:"%H - %an <%ae> - %ad : %s" master > log.txt筛选日志并按照从旧到新…

2022年12月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:走迷宫 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。 时间限制:1000 …

pandas笔记:显示中间的省略号

比如我们有这样一个数据&#xff08;Geolife中的数据&#xff09; 如何把中间的省略号完整地输出呢&#xff1f; pd.set_option(display.max_rows, None) data

机器人中的数值优化(十五)——PHR增广拉格朗日乘子法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

Stable Diffusion 免费升级 SDXL 1.0,哪些新特性值得关注?体验如何?5 分钟带你体验!

一、引言 7 月 26 日&#xff0c;Stability AI 发布了 SDXL 1.0&#xff0c;号称目前为止&#xff0c;最厉害的开放式图像生成大模型。 它到底有没有网上说的那么炸裂&#xff1f;真的已经实现了像 midjourney 一样 靠嘴出图 的功能吗&#xff1f;相对于之前的版本&#xff0c;…

专业的视觉特效处理包,FxFactory 8 Pro for Mac助您打造精彩视频

FxFactory 8 Pro for Mac是一款强大的视觉特效处理包&#xff0c;专门为Mac用户设计。它集成了超过200种高质量的视觉效果和过渡效果&#xff0c;可以轻松地应用于各种视频项目中。该软件提供了一个直观的界面&#xff0c;用户可以通过简单拖放操作将特效应用到视频片段上。它支…

lv4 嵌入式开发-3 标准IO的读写

目录 1 标准I/O – 读写流 2 标准I/O – 按字符输入 3 标准I/O – 按字符输出 4 标准I/O – 思考和练习 5 标准I/O – 按行输入 6 标准I/O – 按行输出 7 标准I/O – 思考和练习 1 标准I/O – 读写流 流支持不同的读写方式: 读写一个字符&#xff1a;fgetc()/fputc()一…

oracle将一个用户的表复制到另一个用户

注&#xff1a;scott用户和scott用户下的源表&#xff08;EMP&#xff09;本身就有&#xff0c;无需另行创建。 GRANT SELECT ON SCOTT.emp TO BI_ODSCREATE TABLE ODS_EMP AS SELECT * FROM SCOTT.emphttp://www.bxcqd.com/news/77615.html SQL语句查询要修改密码的用户…

逻辑回归Logistic

回归 概念 假设现在有一些数据点&#xff0c;我们用一条直线对这些点进行拟合&#xff08;这条直线称为最佳拟合直线&#xff09;&#xff0c;这个拟合的过程就叫做回归。进而可以得到对这些点的拟合直线方程。 最后结果用sigmoid函数输出 因此&#xff0c;为了实现 Logisti…

Mybatis核心对象及工作流程

目录 一、mybatis核心对象 &#xff08;1&#xff09;SqlSession对象直接操作数据库 &#xff08;2&#xff09;SqlSession对象通过代理对象操作数据库 二、mybatis工作流程 一、mybatis核心对象 &#xff08;1&#xff09;SqlSessionFactoryBuilder SqlSession工厂构建者对…

Fine-tuning Large Enterprise Language Models via Ontological Reasoning

本文是LLM系列文章&#xff0c;针对《Fine-tuning Large Enterprise Language Models via Ontological Reasoning》的翻译。 基于本体论推理的大型企业语言模型微调 摘要1 引言2 微调LLM的神经符号管道3 通过概念证明进行初步验证4 结论 摘要 大型语言模型&#xff08;LLM&am…

创建简单的 Docker 数据科学映像

推荐&#xff1a;使用NSDT场景编辑器快速搭建3D应用场景 为什么选择 Docker for Data Science&#xff1f; 作为一名数据科学家&#xff0c;拥有一个标准化的便携式分析和建模环境至关重要。Docker 提供了一种创建可重用和可共享的数据科学环境的绝佳方法。在本文中&#xff…

Openharmony3.2 源码编译(ubuntu 22.04) 过程记录

OS: ubuntu 22.04 x64 1. 下载源码 1.1 安装码云repo工具 sudo apt install python3-pip git-lfsmkdir ~/bin curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo chmod ax ~/bin/repo pip3 install -i https://repo.huaweicloud.com/repository/p…

详解TCP/IP协议第二篇:OSI参考模型详解

文章目录 写给自己的话 一:协议分层与OSI参考模型 二:通过对话理解分层 三:OSI参考模型

飞腾 kylin-server v10 arm64 aarch64 anaconda3 conda 非法指令 Illegal instruction 笔记

原因&#xff1a; chenghlee commented on Jun 15, 2021 Its likely related to the compiler options used to build the linux-aarch64 packages on defaults; basically, Anaconda uses options that target the server-class Neoverse N1/N2 microarchitecture, rather th…