如何将 PIL Image
来回转换为 NumPy 数组,以便我可以比 PIL 的 PixelAccess
进行更快的像素转换?我可以通过以下方式将其转换为 NumPy 数组:
pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
但是,在我修改了数组之后,如何将它加载回 PIL Image
? pic.putdata()
不能正常工作。
原文由 akdom 发布,翻译遵循 CC BY-SA 4.0 许可协议
你不是说
putdata()
到底是怎么回事。我假设你在做这是因为
putdata
需要一个元组序列,而你给它一个 numpy 数组。这个会工作,但速度很慢。
从 PIL 1.1.6 开始, 在图像和 numpy 数组之间进行转换的“正确”方式 很简单
尽管结果数组的格式与您的格式不同(在这种情况下为 3-d 数组或行/列/rgb)。
然后,在对数组进行更改后,您应该能够执行
pic.putdata(pix)
或使用Image.fromarray(pix)
创建新图像。