有没有办法可以用相同的元素“标记”numpy数组中的相邻元素?

时间:2016-11-24 23:38:04

标签: python opencv numpy

我正在使用python 2.7并且我在OpenCV中随机生成区域,最后在numpy数组中看起来像这样:

    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 1 1 0 0
    0 0 0 0 0 0 0 0 0 0 1 1 0 0
    0 0 0 0 0 0 0 0 0 0 0 1 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 1 1 1 0 0 0 0 0 0
    0 0 0 0 0 1 1 1 0 0 0 0 0 0
    0 0 0 0 0 1 1 0 0 0 0 0 0 0
    0 0 0 0 0 1 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0

我实际上使用更大的矩阵,最多可以生成5个区域。 我想要做的是读取生成的矩阵和“组”区域,以生成第二个矩阵,如下所示:

    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 1 1 0 0
    0 0 0 0 0 0 0 0 0 0 1 1 0 0
    0 0 0 0 0 0 0 0 0 0 0 1 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 2 2 2 0 0 0 0 0 0
    0 0 0 0 0 2 2 2 0 0 0 0 0 0
    0 0 0 0 0 2 2 0 0 0 0 0 0 0
    0 0 0 0 0 2 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0

因此,如果最后我有一个带有5个编号点的矩阵。 我对python很新,但不知怎的,我认为这可能是一种简单快捷的方法。我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:4)

SciPy中的

scipy.ndimage.label正是这样做的

您需要定义一个结构来评估哪些元素属于一个组,例如:

structure = [[1,1,1],[1,1,1],[1,1,1]]

如果你想找到附近的元素,包括对角线,或

structure = [[0,1,0],[1,1,1],[0,1,0]]

如果您只需要一个点的左/右/上/下。请注意,该函数返回两个值,第一个是您请求的数组,第二个是找到的“标签”数。

您可能会发现scipy.ndimage.measurements中的其他一些功能在此上下文中很有用。