首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PIL无法将模式F写入jpeg

问PIL无法将模式F写入jpeg
EN

Stack Overflow用户
提问于 2013-05-24 01:52:26
回答 3查看 88.7K关注 0票数 57

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

代码语言:javascript
复制
"IOError: cannot write mode F as JPEG" 

PIL中的CMYK和JPEG文件有问题吗?

代码语言:javascript
复制
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()
EN

回答 3

Stack Overflow用户

发布于 2013-09-19 02:13:41

尝试将图像转换为RGB:

代码语言:javascript
复制
...
new_p = Image.fromarray(fft_p)
if new_p.mode != 'RGB':
    new_p = new_p.convert('RGB')
...
票数 62
EN

Stack Overflow用户

发布于 2018-08-18 22:28:54

Semente的答案对于灰度图像的彩色图像是正确的,你可以使用下面的:

代码语言:javascript
复制
new_p = Image.fromarray(fft_p)
new_p = new_p.convert("L")

如果你使用new_p = new_p.convert('RGB')处理灰度图像,那么该图像的深度仍然是24位,而不是8位,并且会占用硬盘的三倍大小,这将不是真正的灰度图像。

票数 35
EN

Stack Overflow用户

发布于 2020-02-01 12:54:00

我认为这可能是你的fft_p数组是浮点型的,图像的每个像素都应该是0-255格式(即uint8),所以也许你可以在从数组创建图像之前尝试这样做:

代码语言:javascript
复制
fft_p = fft_p.astype(np.uint8)
new_p = Image.fromarray(fft_p)

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16720682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档