Как изменить насыщенность цвета контактного листа в Python? - PullRequest
0 голосов
/ 18 июня 2019

Я не пытаюсь заставить кого-то делать домашнее задание, я просто действительно борюсь с какой-то конкретной проблемой, и я до сих пор не нашел никакой информации в Интернете. Таким образом, цель этой проблемы состоит в том, чтобы создать контактный лист из 9 изображений, где интенсивность пикселей в каждом изображении варьируется. Чтобы пояснить далее, первая строка из трех изображений - это канал красного цвета, где интенсивность красных пикселей умножается на коэффициент 0,1, 0,5 или 0,9, так что самые голубые изображения находятся в крайнем левом углу (или там, где интенсивность красного канала самая низкая). Следующие два ряда представляют собой зеленый и синий каналы, где интенсивности варьируются по ряду, как указано выше. У меня есть контактный лист с уже настроенными 9 изображениями, у меня просто возникают трудности с изменением интенсивности цвета на изображениях.

Я использую библиотеку PIL, и похоже, что методы Image.getpixel (), Image.putpixel (), Image.split () или Image.point () могут быть полезны, но я просто не понимаю как их использовать или с чего начать.

Я определил функцию для интенсивности изображения, теперь у меня просто проблемы с изменением цвета по мере необходимости. Любая помощь будет оценена. Я только начинаю учиться кодировать на python и хотел бы продолжать учиться и совершенствовать свои навыки.

ОБНОВЛЕНИЕ: я добился определенного прогресса, но все мои изображения голубые, хотя я зацикливаюсь на разных цветах. Код работает нормально, так что это синтаксическая ошибка, но я не могу понять, где я ошибаюсь.

import PIL
from PIL import Image, ImageDraw, ImageFont
from PIL import ImageEnhance

# read image and convert to RGB
image=Image.open("readonly/msi_recruitment.gif")
image=image.convert('RGB')
images=[]
imglst = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

def intensity(intn):
    if intn==1:
        return .1
    elif intn==2:
        return .5
    elif intn==3:
        return .9

pixels=image.load()

for channel in imglst:
    for intn in channel:
        for x in range(image.width):
            for y in range(image.height):
                current_color = image.getpixel((x,y))
                r, g, b = current_color
                if imglst.index(channel) == 0:
                    r = r * intensity(intn)
                    new_color = (int(r), g, b)
                elif imglst.index(channel) == 1:
                    g = g * intensity(intn)
                    new_color = (r, int(g), b)
                elif imglst.index(channel) == 2:
                    b = b * intensity(intn)
                    new_color = (r, g, int(b))
                image.putpixel((x,y), new_color)
                images.append(image)
...