2017-04-05 11 views
0

イメージをピクセルの配列に変換しようとしています。 ここに私の現在のコードです。イメージをピクセルのベクトルに変換する

im = Image.open("beeleg.png") 
pixels = im.load() 
im.getdata() # doesn't work 
print(pixels # doesn't work 

理想的には、私の最終目標は、例えば、私は寸法100x100のイメージを持っている場合ので、私はそれぞれの値が間にある寸法1x10000のベクトルを、したい、ちょうどピクセルのベクターに画像を変換することです[0,255]。次に、配列の各値を256で除算し、ベクトルの前に1のバイアスを追加します。しかし、私は配列を得ることができずにこのすべてを進めることはできません。どうやって進める?

+0

['scipy.ndimage.imread'](https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.ndimage.imread.html#scipy.ndimage.imread)を使用してください。 (これは自由に再構成することができます)。 8ビットのグレースケール画像に '' L ''モードを使用してください – Aaron

+0

それはトリックでした!ありがとうございました。回答として投稿してください。 –

答えて

0

一般的に、Scipyのndimageライブラリは、ピクセルをデータ(配列)として扱うためのgo-toライブラリです。 scipy.ndimage.imreadを使用してファイルから画像をロードすることができます(最も一般的なフォーマットがサポートされています)。これは簡単に再構成し、数学的に操作することができます。 modeキーワードを使用すると、読み込み時に色空間変換を指定できます(RGB画像を白黒に変換)。あなたの場合、0-255(8ビットグレースケール)の単色ピクセルを要求したので、mode='L'を使用します。使用法/より有用な機能については、The Documentationを参照してください。

+0

私はまた、小さな側面の質問があります。この画像は私に2次元配列を与えます。しかし、私は画像の1ホットエンコード(1dベクトル)をしたいと思います。これを行う簡単な方法はありますか? –

+0

@Christianこれで、ピクセル値の配列がnumpyになるはずです。 'img = imread(stuff)'と仮定すると、 'length = np.prod(img.shape);を呼び出すことができます。 img = img.reshape(長さ) 'です。あるいは、ndarrayの['flatiter'](https://docs.scipy.org/doc/numpy/reference/generated/numpy.flatiter.html)属性を使用すると、配列のメモリビューを与えることができますメモリを実際に動かすことなくフラットであった。後者は一般的にはより良いアプローチであるため、一部の関数では規則的な配列として扱われない可能性があります。 – Aaron

0

使用OpenCV場合、gray=cv2.imread(image,0)n rows X m cols単一チャネルnumpyのアレイを有するグレースケール画像を返します。 rows, cols = gray.shapeは画像の高さと幅を返します。

関連する問題