【问题标题】:PIL Cannot Handle This Data TypePIL 无法处理此数据类型
【发布时间】:2011-10-08 22:32:39
【问题描述】:

我正在尝试在 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) vs b.shape = (1840, 3264, 2))。

我确实解决了这个问题并找出 PIL 接受哪些数据类型?

【问题讨论】:

    标签: python numpy python-imaging-library


    【解决方案1】:

    我认为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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 2020-04-19
      • 2023-04-02
      • 1970-01-01
      • 2019-10-15
      相关资源
      最近更新 更多