Как получить все пиксели по определенным индексам из массива изображений

Jan 18 2021

Форма массива изображений (540, 960, 3)такая:

img_rgb = [[[ 95  71  71]
  [ 95  71  71]
  [ 95  71  71]
  ...
  [182 171 181]
  [182 171 181]
  [182 171 181]]

 [[ 95  71  70]
  [ 95  71  70]
  [ 95  71  71]
  ...
  [183 172 182]
  [183 172 182]
  [183 172 182]]

 [[ 95  72  70]
  [ 95  71  70]
  [ 95  71  71]
  ...
  [183 172 182]
  [183 172 182]
  [183 172 182]]

 ...

 [[ 36  35  45]
  [ 36  35  45]
  [ 36  35  45]
  ...
  [ 49  45  50]
  [ 49  45  50]
  [ 49  45  50]]

 [[ 36  35  45]
  [ 36  35  45]
  [ 36  35  45]
  ...
  [ 49  45  50]
  [ 49  45  50]
  [ 49  45  50]]

 [[ 36  35  45]
  [ 36  35  45]
  [ 36  35  45]
  ...
  [ 49  45  50]
  [ 49  45  50]
  [ 49  45  50]]]

И я хочу получить элементы с indicesуказанием индекса каждого элемента и тому indicesподобное:

indices = [
 [0, 0], [0, 1], [0, 2]
]

Ожидаемый результат

[
  [ 95  71  71],
  [ 95  71  71],
  [ 95  71  71],
]

В этой ссылке есть два аналогичных вопроса: один - это сумма 2D-массива Python numpy по определенным индексам , а другой - поиск индексов (x, y) определенных (R, G, B) значений цвета из изображений, хранящихся в NumPy ndarrays .

Он получил IndexError: too many indices for arrayответ, когда я попробовал задать вопрос один за другим img_rgb[tuple(indices)].

Ответы

fountainhead Jan 18 2021 at 14:50

Вам просто нужно транспонировать indices.

img_rgb[tuple(np.transpose(indices))]

np.tranpose()будет работать, даже если indicesэто просто список, так как он ожидает в качестве входных данных любую "подобную массиву" структуру.