Como obter todas as pixs por certos índices de uma matriz de imagem

Jan 18 2021

A forma da matriz da imagem é (540, 960, 3)assim:

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

E eu quero obter elementos indicesque indiquem o índice de cada elemento, e indicesassim:

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

Saída esperada

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

Há duas questões semelhantes nesses links, uma é a soma de array 2D numpy Python sobre certos índices e outra é Encontrar os índices (x, y) de valores de cor específicos (R, G, B) de imagens armazenadas em ndarrays NumPy .

Recebi uma IndexError: too many indices for arraypergunta de Quando eu tentei img_rgb[tuple(indices)].

Respostas

fountainhead Jan 18 2021 at 14:50

Você só precisa transpor indices.

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

np.tranpose()funcionaria mesmo se indicesfosse apenas uma lista, uma vez que espera como entrada qualquer estrutura do tipo "array".