首页 > 解决方案 > 如何使用 PIL 从数组到列表并再次返回?

问题描述

我正在尝试将我的图像以列表形式放置,以便在图像中插入像素。但是,在完成列表操作后,我在转换回图像时遇到了问题。原来只是从图像 -> 数组 -> 列表 -> 数组 -> 图像把图像弄得很好。

但是,从 image -> array -> image 开始似乎工作得很好。这是进入导致问题的列表的额外步骤。

下面是我正在运行的 python3 代码。谁能告诉我我做错了什么以及如何将 3D 列表转换回与原始图像相同的 RGB 图像?原始数组和最终数组似乎都是相同的,所以不确定 PIL 不喜欢什么......

import numpy as np
from PIL import Image              

img = Image.open('1.jpg') 
array = np.array(img)              

list1 = array.tolist()             
arrayF = np.array(list1)                                                

img2 = Image.fromarray(arrayF,"RGB")
img2.save('trial.jpg')

print(array)
print(arrayF)

标签: pythonnumpypython-imaging-library

解决方案


如果您使用 来检查dtype您的阵列,print(array.dtype)您将看到它array是 8 位和arrayF64 位的......对于 RGB 图像,PIL是不可接受的。

使用以下命令arrayF恢复为 8 位:

arrayF = arrayF.astype(np.uint8)

推荐阅读