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
图像输出:

相关文章:
OPenCV结构分析与形状描述符(5)查找图像中的连通组件的函数connectedComponents()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 connectedComponents 函数计算布尔图像的连通组件标签图像。 该函数接受一个具有4或8连通性的二值图像,并返回 N,即标签…...
HCIA--实验十三:VLAN间通信子接口实验/双单臂路由实验
一、实验内容 1.需求/要求: 将两个单臂路由通过两台交换机连接起来,成为双臂路由,并探讨这么做的原因。实现全网通,让任何一台主机之间都可以通信。 二、实验过程 1.拓扑图: 2.步骤: 1.给PC配置ip地址…...
AIStarter市场指南:项目分享与框架优化【AI绘画、写作、对话、办公、设计】
随着人工智能技术的飞速发展,越来越多的开发者和爱好者希望能够将自己的创意和项目分享给更多人。AIStarter作为一个专注于AI领域的平台,正致力于打造一个开放的应用市场,让创作者能够轻松分享他们的项目,同时也方便其他用户下载和…...
机器学习第8章 集成学习
目录 个体与集成BoostingBagging与随机森林Bagging随机森林 结合策略平均法投票法学习法 个体与集成 定义:集成学习,也叫多分类器系统、基于委员会的学习等,它是一种通过结合多个学习器来构建一个更强大的学习器的技术。如下图所示 在这里&a…...
京东鸿蒙上线前瞻——使用 Taro 打造高性能原生应用
背景 2024 年 1 月,京东正式启动鸿蒙原生应用开发,基于 HarmonyOS NEXT 的全场景、原生智能、原生安全等优势特性,为消费者打造更流畅、更智能、更安全的购物体验。同年 6 月,京东鸿蒙原生应用尝鲜版上架华为应用市场,…...
day2 QT
作业 2> 在登录界面的登录取消按钮进行以下设置: 使用手动连接,将登录框中的取消按钮使用第2种方式的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断…...
JS_函数声明
JS中的方法,多称为函数,函数的声明语法和JAVA中有较大区别 函数说明 函数没有权限控制符不用声明函数的返回值类型,需要返回在函数体中直接return即可,也无需void关键字参数列表中,无需数据类型调用函数时,实参和形参的个数可以不一致声明函数时需要用function关键字函数没有…...
快速排序+归并排序代码回顾
快速排序与归并排序简介: quick_sort为快速排序,merge_sort为归并排序,两者基于分治的思想; 快速排序,简称快排,它以原来数组中的一个值(我们记为x)作为界限,将比它小…...
DBC中一种特殊的特殊的Signal—多路复用Signal
前言: DBC设计中一般设计Signal时其实存在三种类型,如下图所示: **1)步骤1,鼠标单击展开Message,选中底下的Signal **2)步骤2,弹出dialog中选择 map signal **3)得到…...
前端基础面试题·第三篇——JavaScript(其三)
1.字符串 (1) 常用方法 1.charAt(index) 返回指定位置的字符,若没找到,则返回空2.charCodeAt(index) 返回指定位置的unicode字符编码,若没找到,则返回空 3.String.concat(str1,str2) 连接多个字符串,并返回新字符串4.String.fromCharCode(co…...
MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏
MacBook从来都是高端的代名词,超强的性能搭配顶尖的系统,不光处理大型文件时举重若轻,长期使用也不会有明显卡顿。但很多人在需要MacBook一流的生产力同时,也希望能在空闲时体验游戏的乐趣。在大多人的印象里,Mac电脑对…...
安卓逆向(之)真机root(红米手机)
概览: 1, 手机解锁 2, 下载官方系统包,推荐线刷包,取出镜像文件 3, magisk工具修补 官方系统包 4, adb:命令对手机刷 root 5, 完成 6, 小米手机解锁 点击 小米手机解锁OEM官方教程 记得数据线连接手机电脑 工具下载 点击 下载adb(电脑操作…...
关于转行网络安全的一些建议
在当前就业形势下,不少朋友面临转行的困境。网络安全作为一个热门领域,自然也吸引了许多人的目光。本文将就转行网络安全这一话题,提供一些切实可行的建议。 网络安全行业概况 网络安全涵盖了从基础的脚本编写到高级的漏洞研究等多个层面。该…...
(六十五)第 10 章 内部排序(希尔排序)
示例代码 shellSort.h // // 希尔排序实现头文件#ifndef SHELL_SORT_H #define SHELL_SORT_H#include "errorRecord.h"#define NUM 10 #define MAX_SIZE 20#define EQUAL(a, b) ((a) == (b)) #define LESS_THAN(a, b) ((a) < (b)) #define LESS_OR_EQUAL(a, b) ((…...
802.11 中 scrambler的matlab仿真
802.11a和802.11n中的scrambler仿真不可以直接用matlab中的comm.Scrambler函数。因为这个函数实现的是multiplicative scrambling,而802.11a和802.11n中的scrambler使用的是additive scrambling。additive scrambling使用异或操作进行扰码,multiplicativ…...
centos 服务器 多网卡 ip 地址 设置
centos 服务器 多网卡 ip 地址 设置 https://blog.csdn.net/xh_w20/article/details/141574357 cd /etc/sysconfig/network-scripts/ sudo systemctl status network ● network.service - LSB: Bring up/down networkingLoaded: loaded (/etc/rc.d/init.d/network; bad; v…...
什么是大数据、有什么用以及学习内容
目录 1.什么是大数据? 2.大数据有什么用? 2.1商业与营销: 2.2医疗与健康: 2.3金融服务: 2.4政府与公共服务: 2.5交通与物流: 2.6教育与个性化学习: 3.学习大数据需要学习哪…...
ZBrush与Blender雕刻功能哪个更好些?
选择正确的3D软件首先会让你的创作过程更加轻松,尤其是在动画或大片电影制作方面。不同的软件提供不同的功能,并倾向于专注于特定领域,如绘画、动画或雕刻。如果你选择了适合你风格和目标的软件,你可以创作出极具创意的作品。 在…...
软件工程技术专业软件开发综合实训室解决方案
一、行业背景与前景分析 1.1 软件工程技术专业就业前景 近年来,中国的软件行业取得了显著的成就,即便在全球经济受到新冠疫情冲击的情况下,仍保持了强劲的增长势头。据工业和信息化部发布的数据,2021年我国软件和信息技术服务业…...
链动2+1:高效用户留存与增长的商业模式解析
大家好,我是吴军,任职于一家致力于创新的软件开发企业,担任产品经理的职位。今天,我打算深入分析一个历经时间考验且依旧充满活力的商业模式——“链动21”模式,并通过一个具体的案例和相关数据,展示它如何…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
【Qt】控件 QWidget
控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态:enabled几何:geometrywindows frame 窗口框架的影响 窗口标题:windowTitle窗口图标:windowIconqrc 机制 窗口不透明度:windowOpacity光标:cursor…...
