1

我有一个 numpy 数组heatmapshape(img_height, img_width)和另一个 shape 数组bboxes(K, 4)其中K是一些边界框。每个边界框的定义如下[x_top_left, y_top_left, width, height]:这是此类数组的示例:

bboxes = np.array([
    [0, 0, 4, 7],
    [3, 4, 3, 4],
    [7, 2, 3, 7]
])

heatmap最初用零填充。我需要做的是将每个边界框的值 1 放在相应的位置。结果heatmap应该是:

heatmap = np.array([
    [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
    [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
    [1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0],
    [1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0],
    [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0],
    [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0],
    [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0],
    [0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0],
    [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
])

需要注意的重要事项:

  • 轴 0 对应于图像高度
  • 轴 1 对应于图像宽度

我已经使用 python for 循环解决了这个问题,如下所示:

for bbox in bboxes:
    #       y_top_left:y_top_left + img_height, x_top_left:x_top_left + img_width
    heatmap[bbox[1] : bbox[1] + bbox[3], bbox[0] : bbox[0] + bbox[2]] = 1

我想避免使用 python for 循环(如果可能的话)并且能够做这样的事情:

heatmap[bboxes[:,1] : bboxes[:,1] + bboxes[:,3], bboxes[:,0]:bboxes[:,0] + bboxes[:,2]] = 1

有没有办法在 numpy 中进行多次切片?

我知道numpy integer array indexing,但是要生成这样的索引,我也无法避免 python for 循环。

4

0 回答 0