実践 コンピュータビジョンを読んで、出てきたサンプルコードを試したりいじったりする企画、その1-2。
Maplotlibを使ってあれこれ画像を操作してみる。Matplotlibは既にインストールされているものとする。
Pillow利用。利用方法については1-1 PILを参照。
まずはPillowで読み込んだ画像をそのまま表示してみる。
foo.jpgに適当な画像を保存しておく。
from PIL import Image from matplotlib import pylab as plt # 画像の読み込み img = np.array( Image.open('foo.jpg') ) # 画像の表示 plt.imshow( img )
これで画像が表示される。iPythonで動かしている場合で画像が表示されなければ、%pylabしてから実行する。
%pylab
座標の目盛りもサービスで付いてくる。ちなみにこの写真は友達の家のうさぎなんだけど、傍若無人な振る舞いがとてもかわいいヤツです。
日本語のフォントを使いたいので、fontをTakaoGothicにしておく。お使いの端末によっては設定しなくても良かったり、別のフォント名を指定しないといけなかったりする。
# fontを設定 font = {'family':'TakaoGothic' } matplotlib.rc('font', **font) # 画像表示 img = np.array( Image.open('foo.jpg') ) plt.imshow( img ) # タイトル表示 plt.title( u'うさぎ' )
うさぎかわいい。
赤い実践と青い破線を引いてみる。
# 幅5pixelの赤線地帯 plt.plot( [50, 350], [200, 200], 'r', lw=5 ) # 幅5pixelの青破線 plt.plot( [50, 350], [220, 220], 'b--', lw=5 ) # 画像表示 img = np.array( Image.open('foo.jpg') ) plt.imshow( img )
うさぎかわいい。
グレースケールの画像は等高線を出すことができるとか。やってみよう。
# グレースケールで画像読み込み img = np.array( Image.open('foo.jpg').convert('L') ) # 等高線 plt.contour(img, origin='image')
なるほど。こうなるのか。色が似ている箇所で等高線が引かれている。
グレースケールの画像からヒストグラムを出すことができるらしい。やってみよう。
img = np.array( Image.open('foo.jpg').convert('L') ) # グレースケールうさぎ画像 plt.subplot(121) plt.imshow( img ) plt.axis('off') # ヒストグラム plt.subplot(122) plt.hist( img.flatten(), 128 ) plt.axis('off')
ちょっとうまく上と下を合わせられてない。そして今ひとつうまい感じの結果になっていない。もう少しヒストグラムが出しやすい画像を選んだ方が良かったかも。
ginputでクリックしたpointを取得して、
img = np.array( Image.open('foo.jpg').convert('L') ) plt.imshow(img) # 1箇所pointを取る x, y = plt.ginput(1)[0] # ここでクリック # 座標に赤い丸を(r=red, o=circle) plt.plot( point[0][0], point[0][1], 'ro' ) plt.imshow(img)