如何在Python中更改联系表的颜色饱和度?

时间:2019-06-18 12:41:45

标签: python image rgb pixel

我不是想让任何人做我的作业,我只是在为某个特定问题而苦苦挣扎,而且到目前为止,我还没有在网上找到任何信息。因此,此问题的目的是创建一个包含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)

0 个答案:

没有答案