Python-如何将PIL图像转换为numpy数组?
好吧,我想将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)
。
以上是 Python-如何将PIL图像转换为numpy数组? 的全部内容, 来源链接: utcz.com/qa/432417.html