gpt4 book ai didi

python - 在 Python OpenCV 中查找 connectedComponents 的颜色

转载 作者:太空宇宙 更新时间:2023-11-03 20:54:04 26 4
gpt4 key购买 nike

假设我有一个已二值化的 numpy 数组图像:所有值都是 0 或 255。在 opencv 的 python 变体中,我可以这样做:

conn = cv2.connectedComponentsWithStats(mask, 8, cv2.CV_32S)

conn 对象会告诉我:

  • 有多少连通分量(标签)
  • 原图中每个像素点的标签
  • 每个连通分量的边界框和面积
  • 每个连通分量的质心位置

此外,可以保证标签 0 是“背景”标签,但根据 documentation没有说明该背景是如何确定的。

假设我的图像是白色背景上的黑点,实际上无法保证行为:可能是一个实际上溢出背景的黑点(留下“背景角”)或多个小块点,甚至是排列成这样的黑点一种在它们之间创建白色岛屿等的方式。

但我只对我的黑点感兴趣。

当我对 openCV 提供的背景组件的颜色没有信心时,是否有一种简单的 pythonic 方式来确定每个连接段的基础颜色?或者:我是否遗漏了有关 connectedComponent 功能或 OpenCV API 的一些明显信息?

(注意:我知道我可以暴力破解:遍历标签,在提供的标签数组中找到每个标签的第一个实例,然后探测图像数组中的相应索引。至少我认为我可以做到that-- 文档很少。但这让我觉得非常不雅。)

最佳答案

作为兴趣点,connected components in ImageMagick确实列出了区域的平均颜色,因为它允许模糊颜色区域确定(根据模糊值),此处未显示。

这是一个简单的二进制示例,所以平均颜色是实际颜色:

enter image description here

magick objects.gif -define connected-components:verbose=true -connected-components 4 -auto-level regions.png

Objects (id: bounding-box centroid area mean-color):
0: 256x171+0+0 119.2,80.8 33117 srgb(0,0,0)
2: 120x135+104+18 159.5,106.5 8690 srgb(255,255,255)
3: 50x36+129+44 154.2,63.4 1529 srgb(0,0,0)
4: 21x23+0+45 8.8,55.9 409 srgb(255,255,255)
1: 4x10+252+0 253.9,4.1 31 srgb(255,255,255)

enter image description here


列表按最高区域优先排序。所以“背景”将由最大的区域面积决定,并列在最前面。

结果由 id 编号编码为灰度级,它被拉伸(stretch)到全动态范围以供通过 -auto-level 查看。

还有一个定义参数,可以设置它来生成按区域过滤的输出,然后按平均颜色显示包含结果区域的图像。

magick objects.gif -define connected-components:area-threshold=410 -define connected-components:mean-color=true -connected-components 4 filtered.png


enter image description here

关于python - 在 Python OpenCV 中查找 connectedComponents 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57454209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com