OpenCV(二十八):连通域分割

目录

1.介绍连通域分割

2.像素领域介绍

3.两遍法分割连通域

4.连通域分割函数


1.介绍连通域分割

       连通域分割是一种图像处理技术,用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性,如相近的灰度值或颜色。连通域分割可以用于物体检测、图像分割、目标跟踪等应用。

2.像素领域介绍

         在连通域分割中,常用的领域关系有四领域和八领域。

  • 四领域表示一个像素与其上下左右四个相邻像素连接。
  • 八领域表示一个像素与其上、下、左、右、左上、右上、左下、右下八个相邻像素连接。

3.两遍法分割连通域

(橙色区域为目标物体,即前景像素)

1,第一遍扫描:

a. 从上往下,从左往右遍历图像的每个像素,检查其是否属于前景像素(包括目标物体)。如果是前景像素,则进行以下操作:

  • 检查其上方和左方的像素

                (1) 如果都是前景像素, 则取两者中像素的标签的最小值作为当前像素的标签。

                (2)如果只有一个是前景像素,则将当前像素标记为该前景像素的标签。

                 (3) 如果两个方向都没有前景像素,则将当前像素标记为新的数字标签。(数字标签                                从1开始,然后不断+1递增)

第一遍扫描的结果:

2.第二遍扫描:

a. 将同一连通区域内的不同相邻标签合并,取标签的最小值,使每个连通域只有一个标签。

第二遍扫描结果:

4.连通域分割函数

 4.1只分割连通域的函数 connectedComponents() 

int cv::connectedComponents ( InputArray   image,

OutputArray labels,

int    connectivity =8,

int   ltype = CV_32S

  • image:待标记不同连通域的图像单通道,数据类型必须为CV 8U。
  • labels:标记不同连通域后的输出图像,与输入图像具有相同的尺寸。
  • connectivity:标记连通域时使用的邻域种类,4表示4-邻域,8表示8-邻域,默认参数为8。
  • ltype:输出图像的数据类型,目前支持CV 32S和CV 16U两种数据类型,默认参数为CV 32S

 示例代码:

void connect_f(Mat image){Mat rice,riceBW;//将图像转成二值图像,用于统计连通域cvtColor(image,rice,COLOR_BGR2GRAY);threshold(rice,riceBW,50,255,THRESH_BINARY);//生成随机颜色,用于区分不同连通域RNG rng(10086);Mat out;int number= connectedComponents(riceBW,out,8,CV_16U);//统计图像中连通域的个数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);}//以不同颜色标记出不同的连通域Mat result=Mat::zeros(rice.size(),image.type());int w=result.cols;int h=result.rows;for(int row=0;row<h;row++){for(int col=0;col<w;col++){int label=out.at<uint16_t>(row,col);if(label==0){//背景的黑色不改变continue;}result.at<Vec4b>(row,col)=colors[label];}}//显示结果imwrite("/sdcard/DCIM/result.png",result);
}

 

4.2分割并统计连通域信息的函数connectedComponentsWithStats() 

int cv::connectedComponentsWithStats ( InputArray   image,

OutputArray labels,

OutputArray stats,

OutputArray centroids,

int   connectivity =8,

int    ltype = CV_32S

)

  • image:待标记不同连通域的图像单通道,数据类型必须为CV_8U。
  • labels:标记不同连通域后的输出图像,与输入图像具有相同的尺寸。
  • stats:不同连通域的统计信息矩阵,矩阵的数据类型为CV 32S。阵中第i行是标签为i的连通域的统计特性。
  • centroids:每个连通域的质心坐标,数据类型为CV 64F。
  • connectivity:标记连通域时使用的邻域种类,4表示4-邻域,8表示8-邻域,默认参数值为8。
  • ltype: 输出图像的数据类型,目前只支持CV 32S和CV 16U这两种数据类型,默认参数值为CV_32S。

示例代码:


//统计连通域信息
void connectedComponentsWithStats_f(Mat image){Mat rice,riceBW;//将图像转成二值图像,用于统计连通域cvtColor(image,rice,COLOR_BGR2GRAY);threshold(rice,riceBW,50,255,THRESH_BINARY);Mat stats,centroids,out;int number= connectedComponentsWithStats(riceBW,out,stats,centroids,8,CV_16U);vector<Vec4b> colors;RNG rng(10086);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(0,0,255),1);ostringstream ss;ss << "number:" <<i<<",area:"<<area<< std::endl;}//显示结果imwrite("/sdcard/DCIM/image_Markers.png",image);
}

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

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

相关文章

ue5 物理场的应用

cable mat wpo particle 流体粒子 choas 破损 刚体 布料 cloud abp blueprint riggedbody 体积雾 毛发 全局的 局部的 非均匀的 连续变化的 也可以多个叠加 从全局 到 范围 除了vector还有scalar的值也就是0--1的黑白灰的值 但是最终输出的值的类型还是取决于这个 一…

链动2+1天天秒商城商业模式

链动21天天秒商城商业模式 在当今市场&#xff0c;一种名为链动21天天的秒杀商城商业模式正在引发广泛关注。这种创新的商业模式具有快速拓展市场的强大能力&#xff0c;让许多用户和商家都感到非常惊讶。那么&#xff0c;这种模式究竟是什么&#xff0c;它又为何具有如此大的…

【前端打怪升级日志之CSS篇】position定位

学习链接&#xff1a;阮一峰CSS定位详解 学习总结&#xff1a; 学习应用&#xff1a;待补充。。。

STM32-DMA

1 DMA简介 DMA&#xff08;Direct Memory Access&#xff09;,中文名为直接内存访问&#xff0c;它是一些计算机总线架构提供的功能&#xff0c;能使数据从附加设备&#xff08;如磁盘驱动器&#xff09;直接发送到计算机主板的内存上。对应嵌入式处理器来说&#xff0c;DMA可…

LINE自动回复:快速回复提升客服效率

2023年&#xff0c;LINE在其4个主要市场&#xff1a;对话、日本、台湾和泰国拥有约1.78亿月活跃用户。 LINE不仅是一个通讯软件&#xff0c;更提供广泛的服务&#xff0c;包括语音和视讯通话、群组、发布社交帖子及商务功能。近年来&#xff0c;越来越多的企业在客户服务中使用…

雷士明轩好用吗?测评师对比横评书客、雷士、米家哪款好

如今&#xff0c;大多数人的日常工作和学习都离不开电子设备&#xff0c;长时间盯着屏幕容易造成眼睛疲劳和视力下降。全国近视率占多数的还是青少年&#xff0c;护眼台灯作为一种照明设备&#xff0c;具有调节光线亮度和色温的功能&#xff0c;可以有效减少眼睛的疲劳&#xf…

Day_81-87 CNN卷积神经网络

目录 一. CNN卷积神经网络与传统神经网络的不同 1. 模型图 2. 参数分布情况 3. 卷积神经网络和传统神经网络的层次结构 4. 传统神经网络的缺点&#xff1a; 二. CNN的基本操作 1. 卷积 2. 池化 三. CNN实现过程 1. 算法流程图 2. 输入层 3. 卷积层 4. 激活层 5. 池化层 6. 全连…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Maven目录结构和idea的整合

Maven工程目录结构约束(约束>配置>代码) 项目名 src【书写源代码】 main【书写主程序代码】 java【书写java源代码】resources【书写配置文件代码】 test【书写测试代码】 java【书写测试代码】 pom.xml【书写Maven配置】 测试步骤&#xff08;进入项目名根目录【在根…

MySQL 数据库常用操作语句的总结

1、创建数据库&#xff1a; CREATE DATABASE database_name;2、删除数据库&#xff1a; DROP DATABASE database_name;3、选择数据库&#xff1a; USE database_name;4、创建表&#xff1a; CREATE TABLE table_name (column1 datatype [condition],column2 datatype [cond…

[LINUX使用] iptables tcpdump wireshark tshark

iptables: 收到来自 10.10.10.10 的数据后都丢弃 iptables -I INPUT -s 10.10.10.10 -j DROP 直接 reject 来自 10.10.10.* 网段的数据 iptables -I INPUT -s 10.10.10.0/24 -j REJECT tcpdump: dump eth0的数据到本地 tcpdump -i eth0 -w dump.pcap 只抓 目的地址是 10…

【Docker】docker入门之dockerfile编写

文章目录 前言一、docker是什么&#xff1f;docker介绍docker指令 二、docker有什么用&#xff1f;三、docker怎么用&#xff1f;FROMMAINTAINERRUNENVWORKDIRCOPY、ADDUSEREXPOSE实例 四、docker注意事项docker容器中使用某些宿主机设备时需要额外的权限docker容器中文件内容中…

发布自定义node包,实现自定义脚本命令

比方说yarn&#xff0c;cnpm&#xff0c;vite等命令&#xff0c;无需执行node xxxx&#xff0c;可以自定义执行并完成一些操作 创建一个文件夹如下 在index.js中输入 #!/usr/bin/env node console.log(hello world);在package.json中添加 {...,"bin": {"pack…

利用微调的deberta-v3-large来预测情感分类

前言&#xff1a; 昨天我们讲述了怎么利用emotion数据集进行deberta-v3-large大模型的微调&#xff0c;那今天我们就来输入一些数据来测试一下&#xff0c;看看模型的准确率&#xff0c;为了方便起见&#xff0c;我直接用测试集的前十条数据 代码&#xff1a; from transfor…

JS原理-笔记(1/3)

JS原理-笔记&#xff08;1/3&#xff09; 知识点自测 今天课程中涉及到的已学习知识点 函数的call方法-文档链接 // 以指定的this调用函数&#xff0c;并通过 从第二个参数开始依次传递参数 function func(food,drink){console.log(this)console.log(food)console.log(drink)…

【C语言】数据结构的基本概念与评价算法的指标

1. 数据结构的基本概念 1.1 基本概念和术语 1.1.1 数据 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料 1.1.2 数据元素 数据元素是数据的基本单位,通常作为一个整体进行考虑和…

vue知识点————插槽 slot

slot 插槽 在父组件中引用的子组件 在父组件中写入百度 可在子组件slot插槽中展示出 父组件 <template><div id"app"><child url"https://www.baidu.com">百度</child></div> </template><script> import chil…

如何评估以及优化谷歌ads

在广告投放一段时间后&#xff0c;应该对广告的效果有所了解。如果您的目标是增加销量和网站流量&#xff0c;米贸搜谷歌推广建议请考虑以下问题&#xff1a; 1.哪些关键字为广告带来的点击最多&#xff1f; 2.客户进行搜索时使用的是何种设备&#xff1f;他们来自何处&#xf…

C语言是否快被时代所淘汰?

今日话题&#xff0c;C语言是否快被时代所淘汰&#xff1f;在移动互联网的冲击下&#xff0c;windows做的人越来越少&#xff0c;WP阵营没人做&#xff0c;后台简单的php&#xff0c;复杂的大数据处理的java&#xff0c;要求性能的c。主流一二线公司基本上没多少用C#的了。其实…

ChatGLM学习

GLM paper&#xff1a;https://arxiv.org/pdf/2103.10360.pdfchatglm 130B&#xff1a;https://arxiv.org/pdf/2210.02414.pdf 前置知识补充 双流自注意力 Two-stream self-attention mechanism&#xff08;双流自注意机制&#xff09;是一种用于自然语言处理任务的注意力机制…

Feign负载均衡写法

Feign主要为了面向接口编程 feign是web service客户端&#xff0c;是接口实现的&#xff0c;而ribbon是通过微服务名字访问通过RestTemplate调用的&#xff0c;如下&#xff1a; 在Feign的实现下&#xff0c;我们只需要创建一个接口并使用注解的方式来配置它&#xff08;类似…