JHH*_*HHP 33 jpeg fft mode ioerror python-imaging-library
我正在拍摄jpg图像并使用numpy的fft2来创建/保存新图像.但是它会抛出此错误
"IOError: cannot write mode F as JPEG"
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
sem*_*nte 43
尝试将图像转换为RGB:
...
new_p = Image.fromarray(fft_p)
if new_p.mode != 'RGB':
new_p = new_p.convert('RGB')
...
Run Code Online (Sandbox Code Playgroud)
Him*_*tha 15
Semente的答案适用于彩色图像对于灰度图像,您可以在下面使用: -
new_p = Image.fromarray(fft_p)
new_p = new_p.convert("L")
Run Code Online (Sandbox Code Playgroud)
如果您使用new_p = new_p.convert('RGB')灰度图像,那么图像仍将具有24位深度而不是8位,并且在硬盘上将占用三倍大小并且它不会是真正的灰度图像.
xhe*_*x14 10
我认为可能是您的fft_p数组是浮点类型,并且图像的每个像素都应该具有 0-255 格式(即 uint8),所以也许您可以在从数组创建图像之前尝试这样做:
fft_p = fft_p.astype(np.uint8)
new_p = Image.fromarray(fft_p)
Run Code Online (Sandbox Code Playgroud)
但请注意,fft_p数组中的每个元素都应在 0-255 范围内,因此您可能需要在此之前对其进行一些处理才能获得所需的结果,例如,如果您的每个元素都是介于 0 和 1 之间的浮点数可以将它们乘以 255。