Python 3.x 如何将4d numpy阵列转换为PIL图像?

Python 3.x 如何将4d numpy阵列转换为PIL图像?,python-3.x,numpy,python-imaging-library,Python 3.x,Numpy,Python Imaging Library,我正在用keras做一些图像机器学习,如果我在模型中把一张图片转换成numpy.array,它会返回一个4d numpy数组(预测图片) 我想使用PIL库中的image.fromarray将该数组转换为图像。 但是Image.fromarray只接受2d数组或3d数组 我预测的图片的数组形状是(1,256,256,3)1表示数据数量。 所以1对于图像来说是无用的数据。我想把它转换成(256256,3),而不破坏图像数据。我该怎么办?感谢您的时间。1不是无用的数据,它是一个单一维度。你可以忽略它,

我正在用keras做一些图像机器学习,如果我在模型中把一张图片转换成numpy.array,它会返回一个4d numpy数组(预测图片)

我想使用PIL库中的image.fromarray将该数组转换为图像。 但是Image.fromarray只接受2d数组或3d数组

我预测的图片的数组形状是(1,256,256,3)1表示数据数量。
所以1对于图像来说是无用的数据。我想把它转换成(256256,3),而不破坏图像数据。我该怎么办?感谢您的时间。

1不是无用的数据,它是一个单一维度。你可以忽略它,数据的大小不会改变

你可以用它来做

另外,请确保数据格式正确,对于Image.fromarray,这是uint8

例如:

import numpy as np
from PIL import Image

data = np.ones((1,16,16,3))
for i in range(16):
    data[0,i,i,1] = 0.0

print("size: %s, type: %s"%(data.shape, data.dtype))
# size: (1, 16, 16, 3), type: float64

data_img = (data.squeeze()*255).astype(np.uint8)

print("size: %s, type: %s"%(data_img.shape, data_img.dtype))
# size: (16, 16, 3), type: uint8

img = Image.fromarray(data_img, mode='RGB')
img.show()

arr[0,:,:,:]
删除第一个维度。@hpaulj更好的样式是使用numpy。squeeze@Finomnis,我不明白为什么会更好。@hpaulj,因为它检查第一个维度是否为空。你的代码将忽略其他图像。感谢你的回答,我得到了图像文件,但出现了一些问题。。如果我删除“.astype(np.uint8)”,图像会显示黑色(当我打印它的数组时,数组都是0),图像会显示一些东西,但仍然很奇怪。(但我不知道是因为我的模型工作不正常还是代码出错)你对此有什么想法吗?谢谢。您添加了*255了吗?一些神经网络的输出值介于0.0和1.0之间,四舍五入为uint8(0)。有些神经网络甚至对图像有不同的标准化函数,你必须找出并正确地去标准化。