Cách lấy tất cả các pix theo các chỉ số nhất định từ một mảng hình ảnh

Jan 18 2021

Hình dạng mảng hình ảnh là (540, 960, 3), và nó như thế này:

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

Và tôi muốn lấy các phần tử bằng cách indiceschỉ ra chỉ số từng phần tử, và những thứ indicestương tự như thế này:

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

Sản lượng mong đợi

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

Có những câu hỏi tương tự trong liên kết đó, một là tổng mảng 2D phức tạp của Python trên các chỉ số nhất định và câu hỏi khác là Tìm chỉ số (x, y) của các giá trị màu (R, G, B) cụ thể từ các hình ảnh được lưu trữ trong NumPy ndarrays .

Nó nhận được IndexError: too many indices for arraycâu hỏi Khi tôi thử từng câu một img_rgb[tuple(indices)].

Trả lời

fountainhead Jan 18 2021 at 14:50

Bạn chỉ cần chuyển vị indices.

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

np.tranpose()sẽ hoạt động ngay cả khi indiceschỉ là một danh sách, vì nó mong đợi là đầu vào của bất kỳ cấu trúc "giống mảng" nào.