Превращение изображения RGB в оттенки серого приводит к сиянию белого - PullRequest
0 голосов
/ 31 января 2019

Я пытался превратить RGB-изображение в оттенки серого, манипулируя пикселями:

from PIL import Image

img = Image.open("image.jpg")
pixels = img.load()

for i in range(img.size[0]):
    for j in range(img.size[1]):
        avg = int(pixels[i,j][0] + pixels[i,j][1] + pixels[i,j][2] / 3)
        pixels[i,j] = (avg,avg,avg)

img.show()

По большей части оно серое, но белые части изображения становятся намного более заметными.Как я мог это исправить?

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Вам не хватает скобки.Попробуйте эту строку:

avg = int((pixels[i,j][0] + pixels[i,j][1] + pixels[i,j][2]) / 3)
0 голосов
/ 31 января 2019

У вас отсутствует парентез, но на самом деле объект изображения имеет функцию для преобразования в черно-белое изображение.Попробуйте это:

img = Image.open("image.jpg").convert("L")

Вы можете найти полную документацию для него здесь

0 голосов
/ 31 января 2019

Вместо этого попробуйте средневзвешенное значение:

ave = int(0.30 * pixels[i,j][0] + 0.59 * pixels[i,j][1] + 0.11 * pixels[i,j][2])

Согласно этой статье эти веса должны "учитывать чувствительность глаза к разным цветам".

...