Преобразование изображения в оттенки серого дает неверный результат
def desaturate_image(self, image):
desatimage = Image.new(image.mode, image.size)
pixellist = []
print(len(pixellist))
for x in range(image.size[0]):
for y in range(image.size[1]):
r, g, b = image.getpixel((x, y))
greyvalue = (r+g+b)/3
greypixel = (int(round(greyvalue)), int(round(greyvalue)), int(round(greyvalue)))
pixellist.append(greypixel)
print(pixellist)
desatimage.putdata(pixellist)
return desatimage
Я пишу метод python для преобразования изображения, переданного в качестве параметра, в оттенки серого. Результат, который я получаю, хотя и не прав. Вот вход и выход. Где это не так?
1 ответ
Решение
Сначала вы перебираете пиксели с неправильным размером - изображения подушек располагаются по порядку столбцов. Так ты хочешь
...
for y in range(image.size[1]):
for x in range(image.size[0]):
...
так, что ваш список пикселей хранит пиксели по столбцам.
Это дает вам
Конечно, вы можете просто использовать .convert
метод для более легкого получения представления в оттенках серого, использующий преобразование, упомянутое в документации.
image.convert('L')
Как уже упоминалось ниже, это дает вам изображение в режиме оттенков серого ('L'
) в отличие от вашего текущего ответа, который держит изображение в режиме RGB ('RGB'
) с трехкратным повторением данных.