PIL处理 - 类型错误

时间:2014-07-15 09:58:46

标签: python types python-imaging-library

我正在学习Python,而我正试图在PIL中了解以下内容。 我假设它会直截了当但从它的外观来看它是不是。 因此,我正在加载图像,将像素元组分配给列表,并按像素元组(RGB)执行一些基本计算。 我已经弄明白了。但是,我想将结果值分配给另一个列表,并尝试这样做会返回以下类型错误:

  

TypeError:列表索引必须是整数,而不是元组

虽然我理解不匹配,但我真的不知道如何解决它并正确地为每个像素分配得到的RGB值。我有一种令人讨厌的感觉,这应该是基本的。

提前谢谢

i = Image.open("bike.jpg")
newpixels = []

pixels = i.load()
width, height = i.size
for x in range(width):
    for y in range(height):
        cpixel = pixels[x, y]
        rc = cpixel[0]
        gc = cpixel[1]
        bc = cpixel[2]

        if rc < 128:
            newR = 0
        else:
            newR = 1

        if gc < 128:
            newG = 0
        else:
            newG = 1


        if bc < 128:
            newB = 0
        else:
            newB = 1

        newpixels[x,y] = (newR, newG, newB)

2 个答案:

答案 0 :(得分:0)

Python列表不能那样工作。以这种方式不存在二维列表:相反,您使用列表列表。因此,您需要逐行构建新版本。

newpixels = []
for x in range(width):
    newrow = []
    for y in range(height):
        ... code here ...
        newrow.append((newR, newG, newB))
    newpixels.append(newrow)

答案 1 :(得分:0)

您正在尝试对[x, y]使用newpixel索引,newpixels = [] 被定义为常规python列表:

newpixels[idx]

Python列表只能使用单个整数值(如[x, y])编制索引。 PIL 的像素数据对象允许使用list表示法进行索引,但它不是常规的python newpixels = []

我并不确切知道您要做什么,但如果您想要创建新图片,只需创建一个尺寸正确的空白图片并更改其像素数据:

所以改变:

new_img = Image.new('RGB', i.size)
newpixels = new_img.load()

new_img

然后,您的图像处理结果将在{{1}}。