使用PIL在Python中保存带有RGB值的图片

时间:2014-11-11 15:44:07

标签: python python-imaging-library

所以我正在尝试创建一个需要使用RGB值保存图片的程序。这只是我设置的一个简单测试,以确保我可以打开,获取数据,然后再次使用数据保存图像:

inputIm = Image.open(args.target)

#denoises image and saves it to disk
#data = DenoiseImage(inputIm, factor, iters)
data = np.array(inputIm.getdata())
n, m = inputIm.size
print data
outputIm = Image.new("RGB", (n, m))
outputIm.putdata(data)
outputIm.save(args.fileName)

运行时出现此错误:

Traceback (most recent call last):
  File "DenoiseNumpyWeave.py", line 253, in <module>
    outputIm.putdata(data)
  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1215, in putdata
    self.im.putdata(data, scale, offset)
SystemError: new style getargs format but argument is not a tuple

然而,打印数据行打印出一个带有元组的数组,所以我真的不明白我做错了什么。我用黑/白图片(“L”代替“RGB”)做了完全相同的事情,然后放入一个没有元组的数组(单个值代替),这样就可以了。

2 个答案:

答案 0 :(得分:1)

你的黑白图像有一个通道(&#34; L&#34;)所以n-by-m阵列工作得很好。 RGB图像有3个通道,因此您可能需要一个n×3×3的阵列。

答案 1 :(得分:0)

Numpy已将getdata提供的元组转换为数组。您需要将它们转换回元组putdata才能正常工作。

outputIm.putdata([tuple(pixel) for pixel in data])