我正在学习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)
答案 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}}。