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 для преобразования изображения, переданного как параметр в оттенки серого. Результат я получаю, хотя, не правильно. Здесь вход и выход. Где это неправильно?
Вы выполняете итерацию по пикселям с неправильным измерением вначале - изображения на подушках имеют порядок столбцов. Итак, вы хотите
...
for y in range(image.size[1]):
for x in range(image.size[0]):
...
так что ваш список пикселей хранит пиксели по столбцам.
Это дает вам
Конечно, вы можете просто использовать метод .convert
чтобы получить представление оттенков серого более легко, в котором используется преобразование, упомянутое в документах.
image.convert('L')
Как указано ниже, это дает изображение на самом деле в режиме оттенков серого ('L'
) в отличие от вашего текущего ответа, который сохраняет изображение в режиме RGB ('RGB'
) с трехкратно повторяющимися данными.
LA
вместоL
? Даже если в исходном изображении есть альфа-канал (и тот факт, что он загружен здесь как .jpg, подразумевает, что его, вероятно, нет), OP, вероятно, не заботится об этом.