cv2.connectedComponentsWithStats中连通性和输出图像标签的类型

devtools/2024/10/18 18:15:54/

cv2connectedComponentsWithStats_0">cv2.connectedComponentsWithStats中连通性和输出图像标签的类型

文章目录

  • cv2.connectedComponentsWithStats中连通性和输出图像标签的类型
    • 连通性
    • 输出图像标签的类型
      • `CV_32S` (32-bit signed integer)
      • `CV_16U` (16-bit unsigned integer)
      • 选择 `CV_32S` 还是 `CV_16U`
      • 示例代码

连通性

在计算机视觉中,cv2.connectedComponentsWithStats 函数用于标记图像中的连通组件,并计算每个组件的统计信息。这个函数可以使用4连通性或8连通性来确定哪些像素属于同一个组件。

连通性是指在图像处理中,像素如何与其邻近像素连接。它影响连通组件的划分。

4连通性

在4连通性中,每个像素只与其上下左右四个方向的像素相连,即:

  0
0 X 00

假设当前像素是X,它只与上下左右四个方向的像素相连。

8连通性

在8连通性中,每个像素不仅与其上下左右四个方向的像素相连,还与其对角线方向的四个像素相连,即:

0 0 0
0 X 0
0 0 0

假设当前像素是X,它与其所有八个方向的像素相连。

使用场景

  • 4连通性:通常用于更严格的连接定义,因为它仅考虑直接相邻的像素。这在某些情况下可以减少误检,比如在处理细线条时。
  • 8连通性:用于更宽松的连接定义,因为它包括对角线方向的像素。这适用于需要更宽松的组件划分的情况。

使用方法

cv2.connectedComponentsWithStats 函数中,你可以通过参数 connectivity 来指定连通性

python">import cv2
import numpy as np# 假设 img 是一个二值图像# 使用4连通性
num_labels_4, labels_4, stats_4, centroids_4 = cv2.connectedComponentsWithStats(img, connectivity=4)# 使用8连通性
num_labels_8, labels_8, stats_8, centroids_8 = cv2.connectedComponentsWithStats(img, connectivity=8)

代码示例

python">import cv2
import numpy as np# 创建一个二值图像
img = np.array([[0, 0, 1, 1, 0],[0, 1, 1, 0, 0],[1, 1, 0, 0, 1],[0, 0, 0, 1, 1],[0, 1, 1, 1, 0]], dtype=np.uint8)# 使用4连通性
num_labels_4, labels_4, stats_4, centroids_4 = cv2.connectedComponentsWithStats(img, connectivity=4)# 使用8连通性
num_labels_8, labels_8, stats_8, centroids_8 = cv2.connectedComponentsWithStats(img, connectivity=8)print(f'4连通性组件数量: {num_labels_4}')
print(labels_4)print(f'8连通性组件数量: {num_labels_8}')
print(labels_8)

通过上述代码,可以看到使用不同连通性得到的组件数量和标记结果。根据具体的应用场景选择适当的连通性

输出图像标签的类型

在 OpenCV 中,cv2.connectedComponentsWithStats 函数的 ltype 参数指定了输出图像标签的类型。目前支持 CV_32SCV_16U。这两个类型的区别在于它们能够表示的值范围和内存使用情况:

CV_32S (32-bit signed integer)

  • 数据类型:32位有符号整数
  • 值范围:-2147483648 到 2147483647
  • 内存使用:每个标签占用4个字节

CV_16U (16-bit unsigned integer)

  • 数据类型:16位无符号整数
  • 值范围:0 到 65535
  • 内存使用:每个标签占用2个字节

选择 CV_32S 还是 CV_16U

  • CV_32S
    • 优点:能够表示的标签数量非常大,适合处理具有大量连通组件的图像。
    • 缺点:每个标签占用更多的内存(4个字节)。
  • CV_16U
    • 优点:占用内存较少(每个标签2个字节),适合处理较小的图像或连通组件数量较少的情况。
    • 缺点:能够表示的最大标签数量为65535,如果连通组件数量超过这个值,则不能使用。

示例代码

python">import cv2
import numpy as np# 创建一个二值图像
img = np.array([[0, 0, 1, 1, 0],[0, 1, 1, 0, 0],[1, 1, 0, 0, 1],[0, 0, 0, 1, 1],[0, 1, 1, 1, 0]], dtype=np.uint8)# 使用CV_32S类型
num_labels_32s, labels_32s, stats_32s, centroids_32s = cv2.connectedComponentsWithStats(img, connectivity=8, ltype=cv2.CV_32S)# 使用CV_16U类型
num_labels_16u, labels_16u, stats_16u, centroids_16u = cv2.connectedComponentsWithStats(img, connectivity=8, ltype=cv2.CV_16U)print(f'CV_32S 组件数量: {num_labels_32s}')
print(labels_32s)print(f'CV_16U 组件数量: {num_labels_16u}')
print(labels_16u)

通过上述代码,可以看到使用不同输出类型得到的组件标签和数量。根据具体的应用场景选择适当的标签类型。如果你预计图像中连通组件数量较多,可以选择 CV_32S,否则选择 CV_16U 以节省内存。


http://www.ppmy.cn/devtools/56858.html

相关文章

开发一套java语言的智能导诊需要什么技术?java+ springboot+ mysql+ IDEA互联网智能3D导诊系统源码

开发一套java语言的智能导诊需要什么技术?java springboot mysql IDEA互联网智能3D导诊系统源码 医院导诊系统是一种基于互联网和3D人体的智能化服务系统,旨在为患者提供精准、便捷的医院就诊咨询服务。该系统整合了医院的各种医疗服务资;智慧…

【AIGC半月报】AIGC大模型启元:2024.07(上)

AIGC大模型启元:2024.07(上) (1) AIGVBench-T2V(文生视频基准测评) (1) AIGVBench-T2V(文生视频基准测评) 2024.07.02 目前已经存在一些英文的文生视频基准,如VBench、FETV和EvalCr…

Vue+ElementUi实现录音播放上传及处理getUserMedia报错问题

1.Vue安装插件 npm install --registryhttps://registry.npmmirror.com 2.Vue页面使用 <template><div class"app-container"><!-- header --><el-header class"procedureHeader" style"height: 20px;"><el-divid…

解决expand-change第一次展开无数据显示与实现

最近写需求时用到了expand-change表格展开回调&#xff0c;但我发现第一次展开后并没有展示任何数据&#xff0c;但我的返回值是存在的&#xff0c;当第二次展开时发现数据就有了。此原因是因为获取数据的接口是异步的&#xff0c;导致Dom渲染不同步导致的&#xff0c;其实解决…

谷歌网站SEO服务有哪些?

Seo其实说来说去就包含三样&#xff0c;网站本身技术优化&#xff0c;内容以及外链&#xff0c;而这三样里&#xff0c;网站的技术优化是前提本身&#xff0c;确保网站符合谷歌搜索规范&#xff0c;包括调整网站的结构、速度和移动设备兼容性&#xff0c;以提高用户体验和搜索引…

Docker 查看源地址/仓库地址,更改

一、源地址文件配置路径。若有docker文件夹&#xff0c;没有json&#xff0c;可以新增&#xff0c;复制进去内容 /etc/docker/daemon.json {"registry-mirrors": ["https://dockerhub.azk8s.cn","https://hub-mirror.c.163.com"&#xff0c;&q…

鸿蒙项目实战-月木学途:2.自定义底部导航

效果预览 Tabs组件简介 Tabs组件的页面组成包含两个部分&#xff0c;分别是TabContent和TabBar。TabContent是内容页&#xff0c;TabBar是导航页签栏&#xff0c;页面结构如下图所示&#xff0c;根据不同的导航类型&#xff0c;布局会有区别&#xff0c;可以分为底部导航、顶部…

【neo4j图数据库】入门实践篇

探索数据之间的奥秘&#xff1a;Neo4j图数据库引领新纪元 在数字化浪潮汹涌的今天&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的爆炸性增长和数据关系的日益复杂&#xff0c;传统的关系型数据库在处理诸如社交网络、推荐系统、生物信息学等高度互…