Bir görüntü dizisinden belirli indislere göre tüm pikseller nasıl elde edilir

Jan 18 2021

Görüntü dizisi şekli (540, 960, 3)ve şuna benzer:

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

Ve indicesher eleman indeksini gösteren elemanlar elde etmek istiyorum ve bunun indicesgibi:

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

Beklenen çıktı

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

Bu bağlantıda iki benzer soru var, biri belirli endeksler üzerinden Python numpy 2D dizi toplamı ve diğeri NumPy ndarrays'de depolanan görüntülerden belirli (R, G, B) renk değerlerinin (x, y) dizinlerini bulmak .

Bir IndexError: too many indices for arraysoruyu tek tek denediğimde aldı img_rgb[tuple(indices)].

Yanıtlar

fountainhead Jan 18 2021 at 14:50

Sadece transpoze etmeniz gerekiyor indices.

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

np.tranpose()indicesherhangi bir "dizi benzeri" yapı girdi olarak beklediğinden, sadece bir liste olsa bile çalışır .