24

プレーンな Python 配列を処理する処理ルーチンを実装したので、Python 配列に変換したい .jpg 画像があります。

PIL イメージは numpy 配列への変換をサポートしているようです。ドキュメントによると、次のように記述しています。

from PIL import Image
im = Image.open("D:\Prototype\Bikesgray.jpg")
im.show()

print(list(np.asarray(im)))

これは、numpy 配列のリストを返しています。また、私は

list([list(x) for x in np.asarray(im)])

失敗しているため、何も返されません。

PIL から配列、または単純に numpy 配列から Python 配列に変換するにはどうすればよいですか?

4

4 に答える 4

17

あなたが探しているのは次のとおりだと思います:

list(im.getdata())

または、画像が大きすぎてメモリに完全にロードできない場合は、次のようになります。

for pixel in iter(im.getdata()):
    print pixel

PILドキュメントから:

データを取得

im.getdata() => シーケンス

イメージの内容を、ピクセル値を含むシーケンス オブジェクトとして返します。シーケンス オブジェクトはフラット化されるため、1 行目の値は 0 行目の値の直後に続きます。

このメソッドによって返されるシーケンス オブジェクトは内部 PIL データ型であり、反復や基本的なシーケンス アクセスなど、特定のシーケンス操作のみをサポートすることに注意してください。通常のシーケンスに変換するには (印刷用など)、list(im.getdata()) を使用します。

于 2012-11-25T11:18:52.763 に答える
3

numpy.fromiter を使用して 8 グレースケールのビットマップを反転しますが、副作用の兆候はありません

import Image
import numpy as np

im = Image.load('foo.jpg')
im = im.convert('L')

arr = np.fromiter(iter(im.getdata()), np.uint8)
arr.resize(im.height, im.width)

arr ^= 0xFF  # invert
inverted_im = Image.fromarray(arr, mode='L')
inverted_im.show()
于 2016-04-13T02:44:44.260 に答える