如何通过opencv获取连接组件中的所有像素?
Posted
技术标签:
【中文标题】如何通过opencv获取连接组件中的所有像素?【英文标题】:How to get all pixels in connected components by opencv? 【发布时间】:2016-06-11 07:42:07 【问题描述】:我使用新的opencv 函数connectedComponentsWithStats
(3.0 版)。
如何获取连通分量中的所有像素?
结果
【问题讨论】:
快速浏览一下文档,看起来您正在打印第三个参数stats
。根据文档,我希望像素位于第二个参数label
中。我想象一个没有标签的黑色像素(零)的图像,然后为 3 个组件中的每一个组件用 3 种颜色修补像素。使用统计数据,如果它可以帮助您进行可视化,您可以绘制一个边界框。
谢谢,我终于成功了..谢谢你的建议。
【参考方案1】:
connectedComponentsWithStats
的第三个参数stats
提供的信息可让您在标记区域周围绘制边界框。
第二个参数labels
应该包含一个图像,其中未标记像素的零(黑色像素)和标记的像素组的彩色像素,每个标签一种颜色。请记住,非零值将是唯一的,但非常小(例如,对于 7 个标签,从 0(背景)开始,标签值将上升到 6)。
这是一个 9x9 二进制图像示例:
[
[255,255, 0, 0, 0, 0, 0,255,255],
[255, 0, 0,255,255,255, 0, 0,255],
[ 0, 0,255, 0, 0, 0,255, 0, 0],
[ 0,255, 0, 0,255, 0, 0,255, 0],
[ 0,255, 0,255,255,255, 0,255, 0],
[ 0,255, 0, 0,255, 0, 0,255, 0],
[ 0, 0,255, 0, 0, 0,255, 0, 0],
[255, 0, 0,255,255,255, 0, 0,255],
[255,255, 0, 0, 0, 0, 0,255,255]
]
连接的组件标签是:
[
[1 1 0 0 0 0 0 3 3]
[1 0 0 2 2 2 0 0 3]
[0 0 2 0 0 0 2 0 0]
[0 2 0 0 4 0 0 2 0]
[0 2 0 4 4 4 0 2 0]
[0 2 0 0 4 0 0 2 0]
[0 0 2 0 0 0 2 0 0]
[5 0 0 2 2 2 0 0 6]
[5 5 0 0 0 0 0 6 6]
]
要通过imshow
可视化它们,您可能需要放大这些值。
(可以是您选择的颜色的查找表或计算颜色,只要它们的差异足以在视觉上有意义)。
这是一个将上面的标签缩放 42(最大值 255 / 6 个前景标签)的示例:
[
[ 42 42 0 0 0 0 0 126 126]
[ 42 0 0 84 84 84 0 0 126]
[ 0 0 84 0 0 0 84 0 0]
[ 0 84 0 0 168 0 0 84 0]
[ 0 84 0 168 168 168 0 84 0]
[ 0 84 0 0 168 0 0 84 0]
[ 0 0 84 0 0 0 84 0 0]
[210 0 0 84 84 84 0 0 252]
[210 210 0 0 0 0 0 252 252]
]
【讨论】:
以上是关于如何通过opencv获取连接组件中的所有像素?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 OpenCV Python 中的特征匹配中获取像素坐标