我正在使用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很新,但不知怎的,我认为这可能是一种简单快捷的方法。我希望有人可以帮助我。
答案 0 :(得分:4)
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
中的其他一些功能在此上下文中很有用。