Преобразование изображения RGB в оттенки серого и манипулирование данными пикселей в python
У меня есть изображение RGB, которое я хочу преобразовать в изображение в градациях серого, чтобы у меня был один номер (возможно, от 0 до 1) для каждого пикселя. Это дает мне матрицу, размеры которой равны пикселям изображения. Затем я хочу сделать некоторые манипуляции с этой матрицей и сгенерировать новое изображение в градациях серого из этой управляемой матрицы. Как я могу это сделать?
1 ответ
Я часто работаю с изображениями в виде массивов NumPy - я делаю это так:
import numpy as np
from PIL import Image
x=Image.open('im1.jpg','r')
x=x.convert('L') #makes it greyscale
y=np.asarray(x.getdata(),dtype=np.float64).reshape((x.size[1],x.size[0]))
<manipulate matrix y...>
y=np.asarray(y,dtype=np.uint8) #if values still in range 0-255!
w=Image.fromarray(y,mode='L')
w.save('out.jpg')
Если ваши значения массива y больше не находятся в диапазоне 0-255 после манипуляций, вы можете перейти на 16-битный TIFF или просто изменить масштаб.
-Aldo