Изменение значения цветовых каналов на определенное значение из массива numpy изображения

#python #arrays #numpy #python-imaging-library

#python #массивы #numpy #python-imaging-library

Вопрос:

Я хочу преобразовать изображения PNG (3 канала [RGB]) в массив numpy. Если значение цветовых каналов равно [255 255 255], то значение массива должно быть равно 0. Если значение цветовых каналов равно [87 136 54], значение массива должно быть равно 1. И если значение цветовых каналов равно [70 105 41], то значение массива должно быть 2.

Это мой код для преобразования PNG в массив numpy:

 import numpy as np
from PIL import Image

I = np.asarray(Image.open('Image.png'))
print(I)
  

Вывод:

 [[[255 255 255] [87 136 54] [87 136 54] ... [255 255 255] [70 105 41] [255 255 255]]
 [[255 255 255] [255 255 255] [87 136 54] ... [87 136 54] [87 136 54] [255 255 255]]
 [[255 255 255] [87 136 54] [255 255 255] ... [255 255 255] [255 255 255] [255 255 255]]
 ...
 [[70 105 41] [70 105 41] [255 255 255] ... [70 105 41] [87 136 54] [255 255 255]]
 [[87 136 54] [87 136 54] [255 255 255] ... [87 136 54] [70 105 41] [255 255 255]]
 [[255 255 255] [255 255 255] [255 255 255] ... [255 255 255] [255 255 255] [255 255 255]]]
  

Мой ожидаемый результат:

 [[0 1 1 ... 0 2 0]
 [0 0 1 ... 1 1 0]
 [0 1 0 ... 0 0 0]
 ...
 [2 2 0 ... 2 1 0]
 [1 1 0 ... 1 2 0]
 [0 0 0 ... 0 0 0]]
  

Как я могу это сделать? Заранее спасибо.

Комментарии:

1. В какой части вашего кода вы ожидали преобразовать значения в 0, 1 и 2 ?!

2. Вы пробовали использовать == оператор для реализации логики?

3. Если я использую этот оператор, это потребует большого времени обработки. Есть ли более эффективный способ?

4. Используйте меньшее изображение, если вы хотите меньше обработки