#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. Используйте меньшее изображение, если вы хотите меньше обработки