当前位置: 首页 > 面试题库 >

Python-如何将PIL图像转换为numpy数组?

杨飞
2023-03-14
问题内容

好吧,我想将PIL图像对象来回转换为numpy数组,因此我可以实现比PIL PixelAccess对象所允许的更快的逐像素转换。我想出了如何通过以下方式将像素信息放置在有用的3D numpy数组中:

pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)

但是,在完成所有出色的转换之后,我似乎无法弄清楚如何将其重新加载到PIL对象中。我知道该putdata()方法,但似乎无法使其正常工作。


问题答案:

你并不是在说putdata()行为不正确。我假设你在做

>>> pic.putdata(a)
Traceback (most recent call last):
  File "...blablabla.../PIL/Image.py", line 1185, in putdata
    self.im.putdata(data, scale, offset)
SystemError: new style getargs format but argument is not a tuple

这是因为putdata需要一个元组序列,并且你要给它一个numpy数组。这个

>>> data = list(tuple(pixel) for pixel in pix)
>>> pic.putdata(data)

可以工作,但是非常慢。

从PIL 1.1.6开始,在图像和numpy数组之间进行转换的“正确”方法很简单

>>> pix = numpy.array(pic)

尽管结果数组的格式与你的格式不同(在这种情况下为3维数组或行/列/ rgb)。

然后,在对阵列进行更改后,你应该可以执行任一操作pic.putdata(pix)或使用创建新图像Image.fromarray(pix)



 类似资料:
  • 问题内容: 我有一个RGB图像。我想将其转换为numpy数组。我做了以下 它创建一个没有形状的数组。我假设它是一个iplimage对象。 问题答案: 您可以使用较新的OpenCV python接口(如果我没记错的话,自Ope​​nCV 2.2起就可以使用)。它本机使用numpy数组: 结果:

  • 问题内容: 我正在尝试通过和不通过将字节数组写入磁盘来验证字节数组,然后使用来打开它。我看了and方法,但是我需要图像的大小(只有将字节流转换为图像时才能得到)。 我的读取功能如下所示: 然后作为基本测试,我尝试将字节数组转换为图像: 如果有人知道我在做什么错,或者有一种更优雅的方法将这些字节转换为对我有真正帮助的图像。 PS:我以为我需要字节数组,因为我对字节进行了处理(使它们出现图像错误)。这

  • 问题内容: 我有一个PIL图像格式的图像。我需要将其转换为字节数组。 现在我需要作为字节数组。 问题答案: 感谢大家的帮助。 终于解决了!! 这样,我不必将裁剪后的图像保存在硬盘中,并且能够从PIL裁剪后的图像中检索字节数组。

  • 问题内容: 我因此创建了一个数组: 我要这样做的是在512x512图像的中心显示一个红点。(至少从…开始,我想我可以从那里找出其余的内容) 问题答案: 您可以使用PIL创建(并显示)图像:

  • 问题内容: 我正在尝试将图像从转换为格式。我正在使用。这是到目前为止我一直尝试的。 但我认为图像未转换为CV格式。窗口向我显示了一个大的棕色图像。将图像从转换为格式时,我在哪里出错? 另外,为什么我需要输入访问功能? 问题答案: 用这个:

  • 问题内容: 因此,我在程序中创建了一个函数,该函数使用户可以将自己在Turtle画布上绘制的任何内容保存为具有自己名字的Postscript文件。但是,根据Postscript文件的性质,存在一些颜色未出现在输出中的问题,并且Postscript文件仅在某些其他平台上无法打开。因此,我决定将后记文件另存为JPEG图像,因为JPEG文件应该可以在许多平台上打开,可以显示画布的所有颜色,并且分辨率应比