当前位置: 首页 > news >正文

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);
}

相关文章:

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

目录 1.介绍连通域分割 2.像素领域介绍 3.两遍法分割连通域 4.连通域分割函数 1.介绍连通域分割 连通域分割是一种图像处理技术&#xff0c;用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性&#xff0c;如相近的灰度值或颜色。连通域分割可以…...

达梦控制台还原报错“管道失败”

达梦数据库控制台还原报错“管道失败” 环境 主机操作系统&#xff1a;windows10 profession 达梦数据库版本&#xff1a;达梦7 问题背景 全新安装达梦7数据库后&#xff0c;创建数据库实例&#xff0c;需要恢复往期bat备份。在控制台配置指定搜索目录后&#xff0c;获取备份时…...

[杂谈]-快速了解直接内存访问 (DMA)

快速了解直接内存访问 (DMA) 文章目录 快速了解直接内存访问 (DMA)1、使用 DMA 需要什么&#xff1f;2、DMA介绍3、DMA 中的数据传输如何进行&#xff1f;4、DMA接口5、DMAC 控制器寄存器6、DMA 控制器编程模式6.1 突发模式&#xff08;Burst Mode&#xff09;6.2 循环窃取模式…...

java八股文面试[设计模式]——23种设计模式

设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结 在GOF编写的设计模式(可复用面向对象软件的基础)一书中说道: 本书涉及的设计模式并不描述新的或未经证实的设计&#xff0c;我们只收录那些在不同系统中…...

mysql(十)mysql主从复制--主库切换

概述 可能为了更迭升级服务器&#xff0c;或者主库出现问题&#xff0c;又或者只是希望重新分配容量&#xff0c;此时需要切换主库。 如果这是计划内的切换&#xff0c;会相对容易点。只需要在从库上使用CHANGE MASTER TO命令&#xff0c;并设置合适的值。大多数的值都是可选…...

vue3项目的src下的各个文件夹介绍

在Vue 3项目中&#xff0c;通常的目录结构如下所示&#xff1a; src/|- assets/ # 存放静态资源文件&#xff0c;如图片、字体等|- components/ # 存放可复用的Vue组件|- views/ # 存放页面级别的Vue组件|- router/ # 存放路由相关的配置文件|- store…...

五、编译预处理

源程序编译预处理命令一律以‘#’开头 5.1宏定义 不带参数的宏定义 # define 宏名 字符串 宏命令之后&#xff0c;出现宏名的地方均用其对应的字符串来替换。 宏替换是一种”机械替换“&#xff0c;宏定义语句后一般不加分号&#xff0c;因为它仅具有替换功能&#xff0c;…...

应用出海,Google 分享如何让数字营销素材再上层楼

数字营销广告要想取得理想的效果&#xff0c;广告素材是最关键的决定因素之一。 事实上米贸搜谷歌推广发现&#xff0c;在广告给品牌带来的销售额增量中&#xff0c;有 47% 都归功于广告素材。在当今自动化时代&#xff0c;广告素材的作用尤其重要&#xff1a;固然机器可以完成…...

酱香咖啡喝了没?用数据分析揭秘瑞幸咖啡的7500万用户增长策略

瑞幸 X 茅台 这波联名赢麻了&#xff0c;不仅狂卖 542 万杯&#xff0c;甚至带动茅台市值飙升200亿。 瑞幸这几年联名搞了不少&#xff0c;又是线条小狗的爱情故事&#xff0c;又是椰树、维密、周大福、足球的&#xff0c;下面老李就从数据分析角度&#xff0c;带大家来看一下…...

Grafana之魔法:揭秘数据可视化的艺术

在数据驱动的时代&#xff0c;如何有效地呈现和理解数据成为了每个组织和个人的核心任务。Grafana作为一个领先的开源数据可视化工具&#xff0c;为我们提供了强大的功能和灵活性。本文将深入探讨Grafana的魔法&#xff0c;以及它如何帮助我们更好地理解数据。 Grafana简介 G…...

c高级day2作业

写一个1.sh脚本&#xff0c;将以下内容放到脚本中&#xff1a; 在家目录下创建目录文件&#xff0c;dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中&#xff0c; 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz…...

第3章 【MySQL】字符集和比较规则

3.1 字符集和比较规则简介 3.1.1 字符集简介 如何存储字符串&#xff1f;需要建立字符与二进制数据的映射关系。建立这个关系需要&#xff1a; 1.把哪些字符映射成二进制数据&#xff1f; 2.怎么映射&#xff1f; 将一个字符映射成一个二进制数据的过程也叫做 编码 &#…...

2023 年全国大学生数学建模D题目-圈养湖羊的空间利用率

D题目应该是专科题目&#xff1f;&#xff1f;&#xff1f;不确定了 感觉类似一个细胞分裂问题一样&#xff0c;1&#xff0c;2&#xff0c;4&#xff0c;8&#xff0c; 题目1中规中矩 按照前面说的分配方法&#xff0c;一步一步计算进行 缺口的问题考虑反推回去&#xff0c…...

攻防世界-WEB-ics-05

打开靶机 只有设备维护中心可以点开 点标签得到新的url pageindex 想到文件包含漏洞&#xff08;URL中出现path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼 利用php伪协议查看源码 出现一段base64源码&#xff0c;进行转码得出源码 ?pagephp://filter…...

typedef的四种用法

目录 前言 1&#xff09;为基本数据类型定义类型名 2&#xff09;为自定义数据类型&#xff08;结构体、枚举、共用体&#xff09;定义别名 3&#xff09;为数组定义简易的别名 4&#xff09;为指针定义简洁的名称 前言 在看工程的过程中发现typedef的如下用法&#xff0c…...

Rstudio开不开了怎么办?R is taking longer to start than usual

Rstudio Server 启动时卡死 在使用 linux 服务器版 RstudioServer 的过程中&#xff0c;发现出现了一个问题&#xff0c;导致没有办法正常载入工作页面&#xff0c;网页提示信息是“R is taking longer to start than usual”&#xff0c;直接翻译过来就是“这次启动 R 会比平…...

kubernetes 集群安装加载 br_netfilter 模块

kubernetes 集群安装加载 br_netfilter 模块 Linux 系统默认是禁止数据包转发功能。 加载系统参数&#xff1a; # sysctl -p /etc/sysctl.d/k8s.conf 错误提示&#xff1a; sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or director…...

CATIA Composer软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 CATIA&#xff08;Computer-Aided Three-dimensional Interactive Application&#xff09;是一款由法国达索系统公司开发的三维计算机辅助设计&#xff08;CAD&#xff09;软件。它是一种全面的产品开发解决方案&#xff0c;广泛…...

入行测试一年半的心得体会

成为xx一员测试已经有1年半了&#xff0c;一直没有真正坐下来花些时间将自己的思路理清一下。刚好近期公司落地了OKR&#xff0c;给自己制定了OKR之后思路终于开始清晰起来&#xff0c;朦朦胧胧地开始看清了远方的路&#xff0c;麻着胆子分析一下自己&#xff0c;毕竟摸黑走路的…...

Vue的props配置项

简介&#xff1a;Vue中的组件模板是可以复用的&#xff0c;但是模板中的数据是可以改变的。props配置项用于解决组件迁移复用时接受和保存传递给组件的数据的问题。 1.如何给组件传递数据&#xff1f; 答&#xff1a;按照key:value的形式进行传递。 2.如何保存传递给组件的数…...

GitHub中文插件:打破语言壁垒,让开源协作更顺畅

GitHub中文插件&#xff1a;打破语言壁垒&#xff0c;让开源协作更顺畅 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你是否曾在Git…...

BetterGI原神自动化工具:5大核心功能让你每天节省2小时游戏时间

BetterGI原神自动化工具&#xff1a;5大核心功能让你每天节省2小时游戏时间 【免费下载链接】better-genshin-impact &#x1f4e6;BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连…...

AI提示词工程实战:从入门到精通

本文深入讲解了提示词工程的重要性及其在AI应用中的核心作用。文章首先通过对比数据强调了会与不会使用提示词的人在AI效果上的巨大差异。接着&#xff0c;详细介绍了RISE提示词框架&#xff0c;包括角色、指令、场景和期望四个要素&#xff0c;以及高级技巧如Few-shot提示词和…...

相对噪声模型下梯度下降的收敛性分析与实践指南

1. 项目概述&#xff1a;当梯度方向遇上相对噪声在机器学习和优化的世界里&#xff0c;梯度下降算法就像我们手中的指南针&#xff0c;指引着我们在复杂的高维地形中寻找最低点。但现实往往没那么理想&#xff0c;这个指南针的指针会晃动&#xff0c;我们得到的梯度方向总带着“…...

基于神经进化势函数与差分进化算法解析γ-Al2O3缺陷结构

1. 项目概述与核心挑战在材料模拟领域&#xff0c;氧化铝&#xff08;Al2O3&#xff09;家族因其丰富的多晶型相和广泛的应用&#xff08;从催化剂载体到耐磨涂层&#xff09;而备受关注。其中&#xff0c;γ-Al2O3作为一类关键的过渡氧化铝&#xff0c;其结构解析一直是材料科…...

AI司法应用中的算法公平性:从数据偏见到保护属性选择的技术实践

1. 项目概述&#xff1a;当算法开始“断案”&#xff0c;公平性成了第一道坎最近几年&#xff0c;AI系统在司法领域的渗透速度远超很多人的想象。从辅助量刑建议、评估再犯风险&#xff0c;到自动化审阅海量卷宗&#xff0c;算法正试图将法官和检察官从繁重的重复性劳动中解放出…...

国防采购如何吸引商业AI创新:OTA协议与敏捷合作模式解析

1. 项目概述&#xff1a;当国防采购遇上商业AI创新在过去的十几年里&#xff0c;我接触过不少政府与科技企业间的合作项目&#xff0c;从早期的云计算服务到后来的大数据分析平台。但最近几年&#xff0c;一个趋势愈发明显&#xff1a;以人工智能为代表的颠覆性技术&#xff0c…...

Win11自带IIS搭建局域网网站,从配置到安全避坑的保姆级指南(含MIME类型、目录浏览详解)

Win11 IIS局域网网站搭建全攻略&#xff1a;从零配置到安全加固在家庭或小型办公环境中&#xff0c;搭建一个内部网站用于知识共享或文件管理是提升协作效率的实用方案。Windows 11自带的IIS&#xff08;Internet Information Services&#xff09;服务为这类需求提供了轻量级解…...

CentOS7最小化安装后,这3个必做的配置(换源、设静态IP、更新)一个都不能少

CentOS7最小化安装后的三大关键配置实战指南刚完成CentOS 7最小化安装的系统就像毛坯房——虽然基础框架已经就位&#xff0c;但距离真正"拎包入住"还有一段距离。作为运维人员&#xff0c;我们最迫切的需求是快速搭建一个稳定、高效的基础服务器环境。本文将聚焦三个…...

Hermes Agent 总记不住你说的话?3 步治好 AI 助手的“健忘症“

你有没有这样的经历&#xff1a;你跟它说"每次写营销文章&#xff0c;记得先加载技能审核"&#xff0c;它答应得好好的。结果下一篇写出来&#xff0c;你又得说一遍同样的话。它就像一个只点头不记事的实习生——每轮对话都重头来过。又或者&#xff0c;昨天刚刚聊完…...