1

PythonPILモジュールを使用して、デジタル画像arrayを整数の に読み込むことができます。

from PIL import Image
from numpy import array

img = Image.open('x.jpg')
im = array(img)  # im is the array representation of x.jpg

画像をどのようにPIL解釈するのだろうかarray?最初にこれを試しました

od -tu1 x.jpg

PIL確かに一連の数字が得られましたが、カラー画像をどのように解釈して 3D 配列にするのでしょうか?

要するに、私の質問は、のようなモジュールを使用せずにカラー画像の配列表現を取得する方法を知りたいということです.Pythonを使用してどのようPILに仕事をすることができますか?

4

2 に答える 2

3

まあ、それは私が言う画像形式に依存します。

.jpg の場合、画像の読み取りを許可する形式の完全な説明があります。ここで読むことができます

PIL が行うことは、最初に行ったこととまったく同じです。しかし、その後、仕様に従ってバイトを読み取ります。これにより、これを人間が読める形式 (この場合は配列) に変換できます。

JPEG の場合は複雑に思えるかもしれませんが、png (圧縮されていないバージョン) を使用すると、すべてがより単純に見えます。 例えばこんな画像

圧縮なしのpng画像

開くと、次のようなものが表示されます。 前の png 画像の raw ダンプ

上部に、ヘッダーに対応するいくつかの情報が表示されます。

次に、これらすべてのゼロが表示されます。これは、画像の黒いピクセル (左上隅) の数値表現です。

PIL で画像を開くと、ほとんどが 0 で埋められた配列が得られます。

最初のバイトについて詳しく知りたい場合は、png仕様の 11.2.2 章を参照してください。

一部のバイトが画像の幅と高さに対応していることがわかります。これは、PILが配列を作成できる方法です:)。

お役に立てれば !

于 2013-01-14T13:36:55.960 に答える
1

カラーモードにより異なります。PIL では、画像は整数のリストとして格納され、すべてのチャネルがピクセルごとにインターリーブされます。

これを説明するには:

  • グレースケール画像: [ピクセル 1、ピクセル 2、ピクセル 3、...]
  • RGB: [pixel1_R, pixel1_G, pixel1_B, pixel2_R, pixel_2_G, ...]
  • 同じことがRBGAなどにも当てはまります。
于 2013-01-14T13:42:51.587 に答える