我正在拍摄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()
答案 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。