在NumPy中是否有一个“边界框”函数(非零值的片)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

我正在处理通过numpy.Array()创建的数组,我需要在画布上绘制模拟图像的点。由于数组的中心部分有很多零值,其中包含有意义的数据,所以我想“修剪”数组,擦除只包含零的列和只包含零的行。

因此,我想知道一些原生的numpy函数,甚至是一个代码片段,可以“修剪”或找到一个“边界框”,只分割数组中包含数据的部分。

提问于
用户回答回答于

def bbox2(img):
    rows = np.any(img, axis=1)
    cols = np.any(img, axis=0)
    ymin, ymax = np.where(rows)[0][[0, -1]]
    xmin, xmax = np.where(cols)[0][[0, -1]]
    return img[ymin:ymax+1, xmin:xmax+1]

用户回答回答于

这应该可以做到:

from numpy import array, argwhere

A = array([[0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0],
           [0, 0, 1, 0, 0, 0, 0],
           [0, 0, 1, 1, 0, 0, 0],
           [0, 0, 0, 0, 1, 0, 0],
           [0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0]])

B = argwhere(A)
(ystart, xstart), (ystop, xstop) = B.min(0), B.max(0) + 1 
Atrim = A[ystart:ystop, xstart:xstop]

扫码关注云+社区