Jak uzyskać wszystkie piksele według określonych indeksów z tablicy obrazów

Jan 18 2021

Kształt tablicy obrazu to (540, 960, 3)i wygląda następująco:

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

Chcę uzyskać elementy, indicesktóre wskazują indeks każdego elementu, i indicestak dalej:

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

Oczekiwany wynik

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

W linku tym jest podobne pytanie, jedno to Python numpy 2D tablica sumy dla pewnych indeksów , a drugie to znajdowanie (x, y) indeksów określonych (R, G, B) wartości kolorów z obrazów przechowywanych w NumPy ndarrays .

To dostał IndexError: too many indices for arrayKiedy próbowałem pytanie przez jeden img_rgb[tuple(indices)].

Odpowiedzi

fountainhead Jan 18 2021 at 14:50

Musisz tylko dokonać transpozycji indices.

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

np.tranpose()działałoby, nawet jeśli indicesjest to tylko lista, ponieważ oczekuje na wejście dowolnej struktury podobnej do tablicy.