Comment obtenir tous les pixels par certains indices à partir d'un tableau d'images

Jan 18 2021

La forme du tableau d'image est (540, 960, 3), et cela ressemble à ceci:

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

Et je veux obtenir des éléments indicesqui indiquent l'index de chaque élément, et indicesainsi de suite:

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

Production attendue

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

Il y a deux questions similaires dans ces liens, l'une est la somme du tableau Python numpy 2D sur certains indices , et une autre est la recherche des index (x, y) de valeurs de couleur spécifiques (R, V, B) à partir d'images stockées dans NumPy ndarrays .

Il a obtenu une IndexError: too many indices for arrayquand j'ai essayé la question un par img_rgb[tuple(indices)].

Réponses

fountainhead Jan 18 2021 at 14:50

Vous avez juste besoin de transposer indices.

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

np.tranpose()fonctionnerait même s'il ne indicess'agit que d'une liste, car il attend en entrée une structure de type «tableau».