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

OPenCV结构分析与形状描述符(5)查找图像中的连通组件的函数connectedComponents()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

connectedComponents 函数计算布尔图像的连通组件标签图像。

该函数接受一个具有4或8连通性的二值图像,并返回 N,即标签总数(标签范围为 [0, N-1],其中 0 代表背景标签)。ltype 参数指定了输出标签图像的类型,这是基于标签总数或源图像中的像素总数的一个重要考虑因素。ccltype 参数指定了要使用的连通组件标签算法,目前支持 Bolelli(Spaghetti)[31]、Grana(BBDT)[108] 和 Wu(SAUF)[296] 算法,详见 ConnectedComponentsAlgorithmsTypes。请注意,SAUF 算法强制使用行主序(row-major order)的标签,而 Spaghetti 和 BBDT 不强制。如果至少有一个允许的并行框架被启用,并且图像的行数至少是 getNumberOfCPUs 返回值的两倍,该函数将使用并行版本的算法。

函数原型1


int cv::connectedComponents
(InputArray 	image,OutputArray 	labels,int 	connectivity,int 	ltype,int 	ccltype 
)		

参数1

  • 参数image 待标记的8位单通道图像。
  • 参数labels 目标标记图像。
  • 参数connectivity 8或4,分别表示8连通性或4连通性
  • 参数ltype 输出图像标签类型。目前支持 CV_32S 和 CV_16U。
  • 参数ccltype 连通组件算法类型(详见 ConnectedComponentsAlgorithmsTypes).

函数原型2

这是一个重载成员函数,提供方便。它与上述原型1的不同之处仅在于它接受的参数不同。

int cv::connectedComponents	
(InputArray 	image,OutputArray 	labels,int 	connectivity = 8,int 	ltype = CV_32S 
)		

参数2

  • 参数image: 要标记的8位单通道图像。
  • 参数labels: 目标标记图像(输出)。
  • 参数connectivity: 连通性设置,8表示8邻接,4表示4邻接。
  • 参数ltype: 输出图像的标签类型。目前支持 CV_32S(32位有符号整型)和 CV_16U(16位无符号整型)。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 创建一个简单的二值图像cv::Mat img = cv::Mat::zeros( 300, 300, CV_8UC1 );// 添加一些连通区域cv::rectangle( img, cv::Rect( 50, 50, 100, 100 ), cv::Scalar( 255 ), cv::FILLED );cv::rectangle( img, cv::Rect( 150, 150, 100, 100 ), cv::Scalar( 255 ), cv::FILLED );// 显示原始二值图像cv::imshow( "Binary Image", img );// 初始化输出标签图像cv::Mat labels;int nr_components;// 使用8连通性来寻找连通组件nr_components = cv::connectedComponents( img, labels, 8, CV_32S, cv::CCL_WU );// 打印连通组件的数量std::cout << "Number of components: " << nr_components << std::endl;// 将标签图像转换为8位单通道图像cv::Mat labels_8u;labels.convertTo( labels_8u, CV_8U, 255.0 / ( nr_components - 1 ) );// 将标签图像可视化cv::Mat vis;cv::applyColorMap( labels_8u, vis, cv::COLORMAP_JET );// 显示标签图像cv::imshow( "Labeled Image", vis );cv::waitKey( 0 );return 0;
}

运行结果

终端输出:

Number of components: 2

图像输出:

在这里插入图片描述

http://www.lryc.cn/news/433810.html

相关文章:

  • HCIA--实验十三:VLAN间通信子接口实验/双单臂路由实验
  • AIStarter市场指南:项目分享与框架优化【AI绘画、写作、对话、办公、设计】
  • 机器学习第8章 集成学习
  • 京东鸿蒙上线前瞻——使用 Taro 打造高性能原生应用
  • day2 QT
  • JS_函数声明
  • 快速排序+归并排序代码回顾
  • DBC中一种特殊的特殊的Signal—多路复用Signal
  • 前端基础面试题·第三篇——JavaScript(其三)
  • MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏
  • 安卓逆向(之)真机root(红米手机)
  • 关于转行网络安全的一些建议
  • (六十五)第 10 章 内部排序(希尔排序)
  • 802.11 中 scrambler的matlab仿真
  • centos 服务器 多网卡 ip 地址 设置
  • 什么是大数据、有什么用以及学习内容
  • ZBrush与Blender雕刻功能哪个更好些?
  • 软件工程技术专业软件开发综合实训室解决方案
  • 链动2+1:高效用户留存与增长的商业模式解析
  • Python 调用手机摄像头
  • E5053A 微波下变频器
  • 记录:uniapp直播的弹幕的样式修改与发送弹幕会自动滚动到底部两个技巧
  • 【流程设计】JAVA系统集成activiti工作流,流程设计器,在线审批,会签,驳回,流程图查看(实际多套系统运用案例分析)
  • Debezium系列之:大规模应用debezium server采集数据库,从每个Debezium Server中导出JMX采集指标
  • QY-SW 浮子水位计 RS485 LCD显示屏
  • 橘子学ES实战操作之管道类型Ingest pipelines的基本使用
  • VScode:前端开发中的常用快捷键和技巧
  • Radmin-同一局域网只需IP就可以控制电脑
  • 【附答案】C/C++ 最常见50道面试题
  • C++音视频开发笔记目录