本題
インストール方法
これは簡単。Anacondaからインストールしたい仮想環境のコンソールを起動して
pip install pillowと入力するだけです。
画像を読み込む
まず、画像ファイルを読み込んでみます。データセットとして使うなら読み込む必要がありますからね。次のコードで画像ファイルを読み込んで、オブジェクトに入れる事ができました。
Python Code
# 画像を扱うライブラリーをインポート
from PIL import Image
# 画像ファイルをIMというオブジェクトに読み込み
IM = Image.open('./image/1-3.jpg')
これでimageフォルダにある『1−3.jpg』がIMに入っています。ここで素人であるりばーには?です。画像ファイルがIMというオブジェクトに入ってるってどういう状態ですか??# 画像を扱うライブラリーをインポート
from PIL import Image
# 画像ファイルをIMというオブジェクトに読み込み
IM = Image.open('./image/1-3.jpg')
という訳でもう少し遊んでみて理解を深めます。
ちなみに読み込んだ『1−3.jpg』という画像ファイルはこういう画像です。
手書きの3ですね。MNISTの手書き文字です。
では、手始めに
Python Code
# 書き出してみる
print(IM)
とやってみると# 書き出してみる
print(IM)
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=28x28 at 0x109722358>と結果が表示されました。なんやらよく分かりませんが、RGBでサイズが28x28なんだと。合ってますね。でも欲しいのはそういうんじゃないです。
色情報の取得
次の関数で画像情報の取得ができるそうなのでそれをやってみます。
Python Code
# 画像情報の取得 全体
rec = IM.getdata()
# 画像情報の取得 座標指定(15,15)
px = IM.getpixel((15, 15))
# 画像情報の取得 全体
rec = IM.getdata()
# 画像情報の取得 座標指定(15,15)
px = IM.getpixel((15, 15))
getdataで全体取得、getpixelは座標指定で取得とのことです。取得した情報を書き出してみます。
Python Code
print(rec[1])
print(px)
print(rec[1])
print(px)
結果
(255, 255, 255)色情報が取れてますね。ぽくなってきました。RGBなので、上が白、座標(15,15)は黒ということです。ちなみにrecを配列として表示したのは、そうしないと上手く表示できなかったからです。
(1, 1, 1)
色情報の検証
続いてrecの長さを取ってみます。
Python Code
# recの長さを調べてみる
print(len(rec))
# recの長さを調べてみる
print(len(rec))
78428x28は784なのでどうやらピクセル数になっているようです。ということはgetpixelで取得した座標(15,15)は15x15=225でrecの225番目を指定すると黒になるのかな。(たまたま黒の確率は高いですが...)
Python Code
# recの225番目を調べてみる
print(rec[224])
# recの225番目を調べてみる
print(rec[224])
(255, 255, 255)あれ?ならない。どういう順番で並んでるんだろう。次のコードで読み込んだ画像ファイルの全ての色情報を書き出す事ができます。
Python Code
# recの中身を全部書き出す
for i in range(len(rec)):
print(rec[i])
とやっても784行出るのでちょっと分かりにくいです。もう少し見る方に優しくなるように改造してみます。# recの中身を全部書き出す
for i in range(len(rec)):
print(rec[i])
Python Code
# recの中身を全部書き出す
for i in range(len(rec)):
# y座標の計算
y = i // 28
# x座標の計算
x = i - (i // 28 * 28)
# 座標と色情報を書き出し
print(str(x) + ', ' + str(y) + ' :' + str(rec[i]))
順番iを28で割る事で、何行目か分かります。(Y座標)# recの中身を全部書き出す
for i in range(len(rec)):
# y座標の計算
y = i // 28
# x座標の計算
x = i - (i // 28 * 28)
# 座標と色情報を書き出し
print(str(x) + ', ' + str(y) + ' :' + str(rec[i]))
更に行数に28かけた数値を順番iから引くと、何列目か分かりますね。(X座標)
というか、これを作って気づきました。計算式が間違っていましたね。getpixelは座標が0からスタートしているので、実際には16行目の16列目ですし、計算式も16x16ではなくて、
16行目の位置:(16-1)x28=420。
更に16番目なので+16して、436となるはずです。
確かめてみます。(上の784行の結果でも分かりますが)
Python Code
# recの436番目を調べてみる
print(rec[435])
# recの436番目を調べてみる
print(rec[435])
(1, 1, 1)これで getpixelの結果と一致しました。
まとめ
今回分かった事。
Image.open('〜〜〜')
で、画像ファイルを読み込んでオブジェクトに格納できます。更に
IM.getdata()
で、その画像の色情報を取得できます。この時格納される変数は左上からのピクセル順の配列になっており、その値の中身はRGBで構成されています。
本当は画像の編集とか出力とかもやりたかったですが、思いのほか読み込みだけで長くなってしまったので今日はここまでにして、次回も画像操作の続きをして行きたいと思います。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。