【发布时间】:2011-10-18 09:50:48
【问题描述】:
我在之前的帖子中找到了答案:Saving a Numpy array as an image。唯一的问题是,没有太多关于使用 PyPNG 模块的说明。
网上只有几个例子—— http://packages.python.org/pypng/ex.html#numpy http://nullege.com/codes/search/png.Writer.write
但是鉴于这样的 .write 错误,我该怎么办:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/png.py", line 638, in write
nrows = self.write_passes(outfile, rows)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/png.py", line 783, in write_passes
extend(row)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/png.py", line 780, in <lambda>
return lambda sl: f(map(int, sl))
TypeError: argument 2 to map() must support iteration
这是我的代码 PCA_tool.py 中发生错误的地方(错误出现在“folder.write(outfilename,PrincipalComponent”之后):
#PrincipalComponent.save(path+'transform_'+str(each)+'.png', format='PNG')
outfilename = open(str(path)+'transformed/transform_'+str(each)+'.png', 'wb')
folder = png.Writer(m,n,greyscale=True)
folder.write(outfilename, PrincipalComponent)
outfilename.close()
sys.exit(0)
我正在尝试将 8400 个元素的 numpy.ndarray 保存为 n=80 列、m=105 行的灰度 png 图像。
谢谢,
【问题讨论】:
-
PIL,尽管存在所有问题,但至少得到了更广泛的使用,因此得到了更好的支持。 pythonware.com/products/pil 你最好只做任何你需要的重新缩放(例如重新缩放并转换为
uint8)然后Image.fromarray(data).save('whatever.png') -
我应该说,PrincipalComponent 是 numpy.ndarray 类型而不是列表。我可以使用 PrincipalComponent.reshape(row,col) 重新缩放数组,但是将 numpy.ndarray 转换为可写图像文件?
-
这是(
numpy.ndarray)Image.fromarray所期望的,物有所值。