PIL图像到阵列和后面

时间:2018-01-08 16:10:58

标签: python numpy python-imaging-library

编辑:对不起,代码的第一个版本是废话,我试图删除无用的信息并犯了一个错误。问题保持不变,但现在是我实际使用的代码

我认为我的问题可能非常基本但我无法找到解决方案。我基本上只是想玩PIL并将图像转换为数组并向后转换,然后保存图像。看起来应该是一样的吧?在我的情况下,新图像只是乱码,它似乎有一些结构,但它不是一个像它应该是的飞机的图片:

def array_image_save(array, image_path ='plane_2.bmp'):
  image = Image.fromarray(array, 'RGB')
  image.save(image_path)
  print("Saved image: {}".format(image_path))

im = Image.open('plane.bmp').convert('L')
w,h = im.size
array_image_save(np.array(list(im.getdata())).reshape((w,h)))

1 个答案:

答案 0 :(得分:1)

不完全确定您要实现的目标,但如果您只想将图像转换为numpy数组并返回,则以下工作:

from PIL import Image
import numpy as np

def array_image_save(array, image_path ='plane_2.bmp'):
  image = Image.fromarray(array)
  image.save(image_path)
  print("Saved image: {}".format(image_path))

im = Image.open('plane.bmp')
array_image_save(np.array(im))

您可以将PIL图像传递给np.array,它可以处理正确的整形。您获得数据失真的原因是您将pil图像转换为灰度(.convert('L')),然后尝试将其保存为RGB。