Cara mendapatkan semua gambar dengan indeks tertentu dari larik gambar

Jan 18 2021

Bentuk larik gambarnya adalah (540, 960, 3), dan seperti ini:

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

Dan saya ingin mendapatkan elemen indicesyang menunjukkan indeks setiap elemen, dan indicesseperti ini:

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

Output yang diharapkan

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

Ada dua pertanyaan serupa di tautan tersebut, satu adalah jumlah array 2D numpy Python di atas indeks tertentu , dan yang lainnya adalah Menemukan indeks (x, y) dari nilai warna tertentu (R, G, B) dari gambar yang disimpan dalam ndarrays NumPy .

Itu mendapat IndexError: too many indices for arraypertanyaan Ketika saya mencoba satu per satu img_rgb[tuple(indices)].

Jawaban

fountainhead Jan 18 2021 at 14:50

Anda hanya perlu melakukan transposisi indices.

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

np.tranpose()akan bekerja bahkan jika indiceshanya sebuah daftar, karena ia mengharapkan sebagai masukan setiap struktur "seperti larik".