我使用新的opencv函数connectedComponentsWithStats
(版本3.0)。
如何获取连接组件中的所有像素?
结果
答案 0 :(得分:3)
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]
]