我有一个形状为heatmap
的numpy数组(img_height, img_width)
和另一个形状为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]
])
重要注意事项:
我已经使用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进行循环(如果可能),并且能够执行以下操作:
heatmap[bboxes[:,1] : bboxes[:,1] + bboxes[:,3], bboxes[:,0]:bboxes[:,0] + bboxes[:,2]] = 1
有没有办法在numpy中进行这种多重切片?
我知道numpy integer array indexing,但是要生成这样的索引,我也无法避免使用python for循环。