如何通过opencv获取连接组件中的所有像素?

时间:2016-06-11 07:42:07

标签: c++ opencv opencv3.0

我使用新的函数connectedComponentsWithStats(版本3.0)。 如何获取连接组件中的所有像素?

结果
enter image description here

1 个答案:

答案 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]
]

connected components labels visualised as grayscale islands in a sea of blackness (background)