如何使用索引范围从 numpy 数组中提取多个 roi

问题描述 投票:0回答:1

我有一个形状为 640 x 480 的 numpy 数组:

np.ones((640, 480))
,并且我有行、列的最小、最大范围:

u_min=[497, 157, 493, 137, 567] 
v_min=[ 36,  46, 208, 412, 418] 
u_max=[502, 162, 498, 142, 572]
v_max=[41, 51 213, 417, 423]

我已经尝试过:

import numpy as np

arr = np.ones((640, 480))

u_min= np.array([497, 157, 493, 137, 567], dtype=np.int32)
u_max= np.array([502, 162, 498, 142, 572], dtype=np.int32)
v_min= np.array([36, 46, 208, 412, 418], dtype=np.int32)
v_max= np.array([41, 51, 213, 417, 423], dtype=np.int32)

rois = arr[u_min:u_max, v_min:v_max]

但我收到错误:

TypeError: only integer scalar arrays can be converted to a scalar index

我想以向量化方式对 numpy 数组进行切片而不循环。你能告诉我该怎么做吗?谢谢

python arrays numpy slice
1个回答
0
投票

我不认为花哨的索引涵盖了这一点。或者,如果确实如此,那么不是通过简单的切片,而是通过显式索引。因此最有效的方法是

rois = np.stack([a[ul:uh, vl:vh] for ul, uh, vl, vh
                 in zip(u_min, u_max, v_min, v_max)])

请注意,这仅在您的 ROI 形状相同时才有效。我认为这是故意的。

© www.soinside.com 2019 - 2024. All rights reserved.