#はじめに
数式や数値データがなく,グラフの画像だけがある場合に,画像からプロット座標を読み取って数値化したい場合があると思います.
これを実現するためにPythonのmatplotlibを使ってみました.
やっていることは,
- 画像を表示する
- 表示した画像内をクリックすることで座標を読み取る
- クリック点に丸を打って画像を保存する
というものです.
座標軸をきちっと設定することにより,グラフデータの数値化ができるようになるはずですが,それは今後考えたいと思います.
#プログラム
$ python3 py_img_test.py
/Users/kk/.pyenv/versions/3.5.2/lib/python3.5/site-packages/matplotlib/backend_bases.py:2437: MatplotlibDeprecationWarning: Using default event loop until function specific to this GUI is implemented
warnings.warn(str, mplDeprecation)
上の警告が出て,どうしても消せなかったので,下の行を入れて警告を消しています.
import warnings;warnings.filterwarnings('ignore')
クリック座標取得には,ginput
を使っています.
下は,よく使う割に忘れてしまう,画像の余白を調整して出力する文です.
plt.savefig('fig_test.png', bbox_inches="tight", pad_inches=0.2)
##プログラム全文
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import warnings;warnings.filterwarnings('ignore')
im=Image.open('fig_PSHQ1.png')
im_list=np.asarray(im)
plt.imshow(im_list)
nn=5
a=plt.ginput(n=nn)
for x,y in a:
print(x,y)
plt.plot( x,y, 'ro' )
plt.savefig('fig_test.png', bbox_inches="tight", pad_inches=0.2)
plt.show()
#画像表示事例
別途作成したグラフ(ファイル名:fig_PSHQ1.png)を読み込んで,画像上を5点クリックすると,下のコンソール出力およびクリック点を赤丸で示したグラフが表示・保存されます.
##コンソール出力
$ python3 py_img_test.py
205.951612903 1005.9516129
318.85483871 825.306451613
489.822580645 689.822580645
680.14516129 589.822580645
1125.30645161 415.629032258
#参考サイト
##画像を表示
http://qiita.com/zaburo/items/5637b424c655b136527a
[http://www.mwsoft.jp/programming/computer_vision_with_python/1_2_matplotlib.html]
(http://www.mwsoft.jp/programming/computer_vision_with_python/1_2_matplotlib.html)
##座標値取得
[http://seesaawiki.jp/python-project/d/%BA%C2%C9%B8%C3%CD%BC%E8%C6%C0(ginput)]
(http://seesaawiki.jp/python-project/d/%BA%C2%C9%B8%C3%CD%BC%E8%C6%C0(ginput))
#警告を消す
http://dothiko.hatenablog.com/entry/2014/11/27/001000