首页 > 解决方案 > 如何在单元格具有指定值的二维掩码中查找 top_left、top_right、bottom_left、right 坐标?

问题描述

我有 2D numpy 数组,它是图像的掩码。每个单元格都有01值。所以我想在值为 1 的数组中找到 top:left,right,bottom:left,right。

例如输入数组:

[00000]
[01110]
[01100]
[00000]

预期输出:(1,1), (1,3), (2,1), (2,2)

标签: pythonnumpy

解决方案


使用np.argwhereitertools.product

import numpy as np
from itertools import product

def corners(np_array):
    ind = np.argwhere(np_array)
    res = []
    for f1, f2 in product([min,max], repeat=2):
        res.append(f1(ind[ind[:, 0] == f2(ind[:, 0])], key=lambda x:x[1]))
    return res
corners(arr)

输出:

[array([1, 1], dtype=int64),
 array([2, 1], dtype=int64),
 array([1, 3], dtype=int64),
 array([2, 2], dtype=int64)]

推荐阅读