我刚刚使用 Python 图像库 (PIL) 做了一些图像处理,使用了我之前找到的一篇文章来执行图像的傅里叶变换,但我无法让保存功能正常工作。整个代码运行良好,但它不会保存生成的图像:
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。
BMP
PIL
为了实现正确的可视化,这里有一个建议(以及其他一些小的修改,例如使用fftshift和numpy.array代替):numpy.asarray
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')