またも↑こちらで提供されているサンプルコードのまんま
画像に対し、点や線、文字列の描画
#!/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' )