Cómo obtener todos los píxeles por ciertos índices de una matriz de imágenes

Jan 18 2021

La forma de la matriz de imágenes es (540, 960, 3), y es así:

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]]]

Y quiero obtener elementos indicesque indiquen el índice de cada elemento, y indicesasí:

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

Rendimiento esperado

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

Hay dos preguntas similares en esos enlaces, una es Python numpy 2D array sum sobre ciertos índices , y otra es Encontrar los índices (x, y) de valores de color específicos (R, G, B) de imágenes almacenadas en NumPy ndarrays .

Recibió una IndexError: too many indices for arraypregunta cuando intenté uno por img_rgb[tuple(indices)].

Respuestas

fountainhead Jan 18 2021 at 14:50

Solo necesitas transponer indices.

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

np.tranpose()funcionaría incluso si indiceses solo una lista, ya que espera como entrada cualquier estructura "tipo matriz".