所以我正在尝试创建一个需要使用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”)做了完全相同的事情,然后放入一个没有元组的数组(单个值代替),这样就可以了。
答案 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])