如何将由RGBA元组组成的2D矩阵转换为PIL图像?

3
假设我有一个名为的图片,其中包含以下内容:
[[(255, 255, 255, 255), (0, 0, 0, 255), (0, 0, 0, 255), (0, 0, 0, 255)],
 [(0, 0, 0, 255), (255, 255, 255, 255), (0, 0, 0, 255), (0, 0, 0, 255)],
 [(0, 0, 0, 255), (0, 0, 0, 255), (255, 255, 255, 255), (0, 0, 0, 255)],
 [(0, 0, 0, 255), (0, 0, 0, 255), (0, 0, 0, 255), (255, 255, 255, 255)]]

我可以从它创建PIL图像吗?

我尝试了Image.fromarray(np.asarray(img)),但是出现了以下错误:

TypeError: Cannot handle this data type: (1, 1, 4), <i4

我该如何解决这个问题?此外,是否有不使用numpy模块的解决方案?谢谢。

尝试使用 Image.fromarray(np.array(img), mode="RGBA") - Arvin Kushwaha
2个回答

0

您需要明确将数组的dtype设置为np.uint8,以便让Image对象生成器知道输入数据的格式。我还建议指定模式,因为我不知道当有4个通道时PIL如何在RGBA和CMYK之间选择。解决方案在这里:

from PIL import Image
    
Image.fromarray(np.asarray(img, dtype=np.uint8), mode='RGBA')

0

我认为你需要这个(从文档中很容易理解):

from PIL import Image

arr = np.array(img)
PIL_image = Image.frombuffer('RGBA',(arr.shape[0],arr.shape[1]),np.uint8(arr.reshape(arr.shape[0]*arr.shape[1],arr.shape[2])),'raw','RGBA',0,1)

它没有达到我的期望,使用问题中的数据生成了一张空白图片。 - Real Donald Trump
@JimmyYang,你的图像是什么模式?不是'RGBA'吗?试试我的帖子更新。可能是数据类型问题。 - Ehsan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接