我需要对从图像读取的值的二维数组执行一些操作,然后使用生成的二维数组创建图像。我正在使用 python 列表来表示二维数组。
发生了一些非常奇怪的事情;二维数组(列表列表)中的值似乎在我标记的两个打印调用之间的某个时刻变为“0”。也就是说,它们似乎是从图像中正确读取的……但后来不知何故被设置为零。
代码:
image = Image.open("test.png").convert("L")
data = [ [255] * image.size[1] ] * image.size[0]
pix = image.load()
for x in range(0, image.size[0]):
for y in range(0, image.size[1]):
data[x][y] = pix[x, y]
#data[x][y] = 77
print "1. data[x][y] = " + str(data[x][y]) + " .vs. " + str(pix[x, y]) # Prints correct values
for x in range(0, image.size[0]):
for y in range(0, image.size[1]):
print "2. data[x][y] = " + str(data[x][y]) + " .vs. " + str(pix[x, y]) # Always prints "0 .vs. [correct value]"
但是,如果我注释掉该行
data[x][y] = pix[x, y]
并取消注释:
data[x][y] = 77
然后两条print语句显示data中的所有元素都是77
到底是怎么回事?我不是 python 专家,但我想不出任何合理的理由为什么列表值会这样改变。
我已经尝试了以下行,以防像素访问器正在做一些奇怪的事情:
data[x][y] = 0 + int(pix[x, y])
但仍然得到相同的结果。我也尝试过使用 RGB 图像而不是灰度图像。
我应该明确表示,我绝对不会对这两个打印调用之间的数据做任何事情。上面的代码正是我将原始程序简化为的代码(在发现我所有的“结果”图像文件都是黑色之后)。