PIL无法处理此数据类型

2024-05-23 13:35:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在numpy中使用fft模块:

import Image, numpy

i = Image.open('img.png')
a = numpy.asarray(i, numpy.uint8)

b = abs(numpy.fft.rfft2(a))
b = numpy.uint8(b)

j = Image.fromarray(b)
j.save('img2.png')

但是,当我尝试将numpy数组转换回PIL图像时,会出现错误:

TypeError: Cannot handle this data type

但是,a和b数组似乎都具有相同的数据类型(uint8),并且执行Image.fromarray(a)操作很好。我确实注意到这些形状略有不同(a.shape=(1840,3264,3)与b.shape=(1840,3264,2))。

我会解决这个问题并找出PIL接受的数据类型?


Tags: 模块imageimportfftnumpyimgpilpng
1条回答
网友
1楼 · 发布于 2024-05-23 13:35:04

我认为rfft2可能是在错误的轴上执行的。 默认情况下,它使用最后两个轴:axes=(-2,-1)。第三个轴表示RGB通道。相反,似乎更有可能的是,人们希望在空间轴上执行FFT,axes=(0,1)

import Image
import numpy as np

i = Image.open('image.png').convert('RGB')
a = np.asarray(i, np.uint8)
print(a.shape)

b = abs(np.fft.rfft2(a,axes=(0,1)))
b = np.uint8(b)
j = Image.fromarray(b)
j.save('/tmp/img2.png')

相关问题 更多 >