首页 > 解决方案 > TypeError:无法处理此数据类型 - `PIL.Image.fromarray` 的模式错误?

问题描述

我正在尝试使用PIL.Image.fromarray

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

a = np.array([[[255, 0, 0], [0, 255, 0], [0, 0, 255]]])
im = Image.fromarray(a, mode="RGB")
im.save("test.png")
plt.imshow(im)
plt.show()

我希望看到 3 个像素的红色、绿色和蓝色。

但是,如果我省略mode了文档示例中所示的关键字参数,我会得到:

TypeError:无法处理此数据类型

如果我设置mode="RGB",保存的图像文件test.pngmatplotlib窗口都如下所示:

数字

标签: pythonarraysimagenumpypython-imaging-library

解决方案


堆叠你的三个数组并uint8根据这个这个答案将它们转换为类型。

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

a = (np.dstack(([255, 0, 0],[0, 255, 0],[0, 0, 255]))).astype(np.uint8) 

im = Image.fromarray(a, mode="RGB")
im.save("test.png")
plt.imshow(im)
plt.show()

另一种选择是为您的输入数组添加额外的维度,使其具有形状(1, 3, 3)

a = np.array([[[255, 0, 0], [0, 255, 0], [0, 0, 255]]], dtype=np.uint8)
im = Image.fromarray(a, mode="RGB")

在此处输入图像描述


推荐阅读