Come ottenere tutti i pixel da determinati indici da un array di immagini

Jan 18 2021

La forma dell'array di immagini è (540, 960, 3), e in questo modo:

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 voglio ottenere elementi indicesche indichino l'indice di ogni elemento e indicessimili:

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

Uscita prevista

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

Ci sono due domande simili in questi link, una è la somma di array 2D numpy Python su determinati indici e un'altra è Trovare gli indici (x, y) di valori di colore specifici (R, G, B) da immagini memorizzate in NumPy ndarrays .

Ha ottenuto una IndexError: too many indices for arraydomanda quando ho provato una di img_rgb[tuple(indices)].

Risposte

fountainhead Jan 18 2021 at 14:50

Hai solo bisogno di trasporre indices.

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

np.tranpose()funzionerebbe anche se indicesfosse solo un elenco, poiché si aspetta come input una struttura "simile ad array".