Image
PIL よりも高速なピクセル単位の変換が行えるように、PIL を NumPy 配列に変換するにはどうすればよいですかPixelAccess
? 次のようにして NumPy 配列に変換できます。
pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
Image
しかし、配列を変更した後、それを PIL に再度ロードするにはどうすればpic.putdata()
よいでしょうか? うまく機能しません。
ベストアンサー1
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)
。