Я не пытаюсь заставить кого-то делать домашнее задание, я просто действительно борюсь с какой-то конкретной проблемой, и я до сих пор не нашел никакой информации в Интернете. Таким образом, цель этой проблемы состоит в том, чтобы создать контактный лист из 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)