Преобразование изображения 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

Другие вопросы по тегам