LoginSignup
19
15

More than 5 years have passed since last update.

Python-matplotlibで画像の座標を読取る

Last updated at Posted at 2016-10-11

はじめに

数式や数値データがなく,グラフの画像だけがある場合に,画像からプロット座標を読み取って数値化したい場合があると思います.

これを実現するために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)

プログラム全文

py_img_test.py
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

出力画像

fig_test.png

参考サイト

画像を表示

http://qiita.com/zaburo/items/5637b424c655b136527a
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://dothiko.hatenablog.com/entry/2014/11/27/001000

19
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
15