我正在通过keras做一些图像机器学习,如果我把一张转换成numpy.array的图片放在我的模型中,它会返回一个4dnumpy数组(预测图片)。
我想使用PIL库中的Image.fromarray将该数组转换为图像。但Image.fromarray只接受二维数组或三维数组。
我预测的图片的数组形状是(1,256,256,3) 1表示数据的数量。所以1对图像来说是无用的数据。我想把它转换成(256,256,3)而不损坏图像数据。我该怎么办?耽误您时间,实在对不起。
发布于 2019-07-21 23:18:38
1不是无用的数据,它是一个奇异维。你可以省略它,数据的大小不会改变。
你可以用numpy.squeeze做到这一点。
此外,请确保您的数据格式正确,对于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()
https://stackoverflow.com/questions/57134423
复制相似问题