如何用PIL保存图像?
我刚刚使用Python图像库(PIL)进行了一些image processing,使用了之前发现的用于执行图像的傅里叶变换的后期处理,而我无法使保存function正常工作。 整个代码工作正常,但它只是不会保存结果图像:
from PIL import Image import numpy as np i = Image.open("C:/Users/User/Desktop/mesh.bmp") i = i.convert("L") a = np.asarray(i) b = np.abs(np.fft.rfft2(a)) j = Image.fromarray(b) j.save("C:/Users/User/Desktop/mesh_trans",".bmp")
我得到的错误如下:
save_handler = SAVE[string.upper(format)] # unknown format KeyError: '.BMP'
如何用Pythons PIL保存图像?
有关文件扩展名的错误已被处理,您可以使用bmp
(不带点),也可以使用扩展名传递输出名称。 现在要处理错误,您需要正确修改频域数据以保存为整数图像, PIL
告诉您,它不接受浮点数据保存为bmp。
这是一个build议(与其他小的修改,如使用fftshift
和numpy.array
而不是numpy.asarray
)进行适当的可视化转换:
import sys import numpy from PIL import Image img = Image.open(sys.argv[1]).convert('L') im = numpy.array(img) fft_mag = numpy.abs(numpy.fft.fftshift(numpy.fft.fft2(im))) visual = numpy.log(fft_mag) visual = (visual - visual.min()) / (visual.max() - visual.min()) result = Image.fromarray((visual * 255).astype(numpy.uint8)) result.save('out.bmp')
您应该能够简单地让PIL从扩展名获得文件types,即使用:
j.save("C:/Users/User/Desktop/mesh_trans.bmp")
尝试删除.
之前.bmp
(它不符合预期的BMP
)。 正如你从错误中看到的那样, save_handler
是你提供的format
上层,然后在SAVE
寻找匹配。 但是,该对象中的相应键是BMP
(而不是.BMP
)。
我不太了解PIL
,但是从一些快速search看来,这似乎是一个图像mode
的问题。 将j
的定义更改为:
j = Image.fromarray(b, mode='RGB')
似乎为我工作(但是请注意,我对PIL
知之甚less,所以我build议使用@ mmgp的解决scheme,因为他清楚地知道他们在做什么:))。 对于mode
的types,我用这个页面 – 希望有一个select会为你工作。
我知道这是旧的,但我发现通过使用open(fp, 'w')
文件,然后保存该文件将工作。 例如:
j.save(open(fp, 'w'))
当然, fp
是文件path。 (这是与枕头)