チラシ裏日記上等!!新館

オタクWebエンジニアの雑記ブログです。本や漫画や映画の感想なんかを主に書いています。最近は勉強会の感想とかも書いています。

numpyで画像をベクトル化

機械学習では入力する値はベクトル化しないといけない。となると画像を学習させるときは画像をベクトル化する必要があります。このベクトル化どうやってやるのか謎でいろいろ調べたところ、普通にnumpyを使えば良いらしくこんな簡単にベクトル化できるのだなとちょっと感動しました。

numpyを以下のコードで試しました。

# numpy_practice.py
from PIL import Image
import numpy as np
from matplotlib import pylab as plt
import sys

args = sys.argv

img = np.array( Image.open(args[1]) )
print(img.shape)
print(img[0])

実行と出力結果は以下のような感じ

$ python src/numpy_practice/numpy_practice.py 画像のパス
(160, 160, 3)
[[255 254 255]
 [255 254 255]
 [255 254 255]
 [255 254 255]
 [255 253 254]
 [255 253 254]
 [255 253 254]
 [255 253 254]
 [255 253 254]
 [254 254 254]
 [254 254 254]
 [254 254 254]
 [254 254 254]
 [254 254 254]
 [254 255 254]
 [251 254 253]
 [249 253 252]
 [251 254 254]
 [252 255 254]
 [249 254 249]
 [248 252 246]
 [249 250 246]
...

160x160の画像でRGBのそれぞれの値が配列になって入っています。これでピクセルごとのデータを数値に出来たのでこれを処理しやすい形に変換して食わせることができれば画像を学習することができそうです。ここまで気づくのに結構時間がかかってしまった。あとはこれを使って学習できる形に変換して実際に試してうまく行けるか確認したてようやく自分のやりたい画像分類とかに進めそうです。