PIL无法将模式F写入jpeg

时间:2013-05-23 17:52:26

标签: jpeg python-imaging-library fft mode ioerror

我正在拍摄jpg图像并使用numpy的fft2来创建/保存新图像。但是它会抛出此错误

"IOError: cannot write mode F as JPEG" 

PIL中是否存在CMYK和JPEG文件的问题???

p = Image.open('kibera.jpg')
bw_p = p.convert('L')
array_p = numpy.asarray(bw_p)
fft_p = abs(numpy.fft.rfft2(array_p))
new_p = Image.fromarray(fft_p)
new_p.save('kibera0.jpg')
new_p.histogram()

3 个答案:

答案 0 :(得分:39)

尝试将图像转换为RGB:

...
new_p = Image.fromarray(fft_p)
if new_p.mode != 'RGB':
    new_p = new_p.convert('RGB')
...

答案 1 :(得分:12)

Semente的答案适合彩色图像 对于灰度图像,可以在下面使用:-

new_p = Image.fromarray(fft_p)
new_p = new_p.convert("L")

如果您将new_p = new_p.convert('RGB')用于灰度图像,则该图像将仍然具有24位深度而不是8位深度,并且将占据硬盘上的三倍大小,并且它将不是真正的灰度图像。

答案 2 :(得分:4)

我认为您的fft_p数组可能是浮点型的,并且图像的每个像素都应采用0-255的格式(即uint8),因此也许您可以尝试在创建图像之前进行此操作来自数组:

fft_p = fft_p.astype(np.uint8)
new_p = Image.fromarray(fft_p)

但是请注意,fft_p数组中的每个元素都应在0-255范围内,因此可能需要对它进行一些处理才能获得所需的结果,例如,如果您对每个元素是介于0和1之间的浮点数,您可以将它们乘以255。