end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

pylab for python による画像処理入門 その2

www.oreilly.co.jp

またも↑こちらで提供されているサンプルコードのまんま

画像に対し、点や線、文字列の描画

#!/usr/bin/python
# -*- coding: utf-8 -*-

# from PIL import Image

# import numpy
# #from pylab import *
import matplotlib
matplotlib.use('Agg')
import matplotlib.pylab as plb


# # 配列に画像読込み
# im = numpy.array(Image.open('empire.jpg'))

# # 画像表示
# # が、私のcent7環境には x11がない為、comment out
# # imshow(im)

# 点の座標
x = [100,100,400,400]
y = [200,500,200,500]

plb.plot(x,y,'r*')    # 赤い星マークを4点に描画
plb.plot(x[:2],y[:2]) #最初の2点間に線を描画

plb.title('test pylab')  # タイトル追加
plb.axis('off')
# show()

# savefig()は、画像フォーマットを拡張子で判断しますが
# 引数で指定することも可能
# https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.savefig.html

plb.savefig( '1_2_1.png' )

「import pylab」の代わりに「import matplotlib , matplotlib.pylab」

import pylab as plb

ヘッダ部を↑このように記載すると、 画面のない私のcentos on virtual boxでは実行時に

self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

のようなエラーとなる為、次のようにimportしています。

import matplotlib
matplotlib.use('Agg')
import matplotlib.pylab as plb

等高線図とヒストグラム

#!/usr/bin/python
# -*- coding: utf-8 -*-

from PIL import Image
import numpy
import matplotlib
matplotlib.use('Agg')
import matplotlib.pylab as plb

# 画像を配列に読み込む
im = numpy.array(Image.open('empire.jpg').convert('L'))

plb.figure()                    # 新規図
plb.gray()                      # 色を使わない
plb.contour(im, origin='image') # 左上が原点の等高線
plb.axis('equal')               # X-Y軸の増分を同じに
plb.axis('off')                 # 座標軸を非表示
plb.savefig( '1_2_2_1.png' )

plb.figure()                    # 新規図
plb.hist(im.flatten(),128)      # ヒストグラム
plb.savefig( '1_2_2_2.png' )

画像のサイズと、型の抽出

#!/usr/bin/python
# -*- coding: utf-8 -*-

import numpy
from PIL import Image

im = numpy.array(Image.open('empire.jpg'))
print im.shape, im.dtype        #カラー画像のsizeと型

im = numpy.array(Image.open('empire.jpg').convert('L'),'f')
print im.shape, im.dtype        #白黒画像のsizeと型

画像のグレースケール化と、明度変換

#!/usr/bin/python
# -*- coding: utf-8 -*-

from PIL import Image
import numpy
import matplotlib
matplotlib.use('Agg')
import matplotlib.pylab as plb


im = numpy.array(Image.open('empire.jpg').convert('L'))
im2 = 255 - im                  # 画像反転
im3 = (100.0/255) * im + 100    # 100〜200の範囲に縮小?
im4 = 255.0 * (im/255.0)**2     # 2乗

#明度の最大値/最小値 表示
for i in (im,im2,im3,im4):
  print "(MIN MAX)=(", str( int(i.min()) ), str( int(i.max())) ,")"

plb.figure()
plb.gray()
plb.axis('off')
plb.imshow(im)          #画像の登録?
plb.savefig( '1_3_2-1.png' )

plb.figure()
plb.gray()
plb.axis('off')
plb.imshow(im2)         #画像の登録?
plb.savefig( '1_3_2-2.png' )

plb.figure()
plb.gray()
plb.axis('off')
plb.imshow(im3)         #画像の登録?
plb.savefig( '1_3_2-3.png' )

plb.figure()
plb.gray()
plb.axis('off')
plb.imshow(im4)         #画像の登録?
plb.savefig( '1_3_2-4.png' )