LoginSignup
0
4

More than 3 years have passed since last update.

画像に合わせて点を打つ

Last updated at Posted at 2020-08-30

概要

ログに記録されたタッチ座標をそれに対応する画面イメージにひたすらプロットする
・・・という苦行が発生したのでそれを自動化する。

なお、x軸、y軸が描画され、画像のサイズも変わります。
Python - Python3 座標を画像の上にプロット|teratail

plt.imshowにより、プロットされた画像を確認できたのですが、それを
...
にてセーブすると、ピクセル数が変わってさらに余計な軸までついて、その周りに余白が現れます。

逆にそのほうが都合がいいという稀?なケース。
あとでわかったことですが、どうやらPillow(PIL)がなくてもできるようです。リンク

コード

import matplotlib.pyplot as plt
from PIL import Image

# Figureとaxの準備 ... matplotlibの定型的な処理
fig = plt.figure(figsize=(8, 6))
fig.patch.set_facecolor('white') #<--これはなくてもよさそう。図全体の背景色を設定するが、imageで塗られる形になるため。
ax = fig.add_subplot(1, 1, 1)

# 画像だと(0,0)が左上に来て, y軸の正の方向が下を向くのでinvert_yaxis()
# ax.invert_yaxis()と思ったけど、いらないようす。

# xとyはログから入手したタッチ座標。ここでは、暫定的に左上、中央、右下を指定している
x = [0, 400, 200]
y = [0, 300, 150]

# タッチ座標をプロットする
ax.scatter(x, y, c='red', s=20)


# 背景に画面イメージを出す
im = Image.open("aaaa.png")
ax.imshow(im)

# プロット画像を保存する
plt.savefig("aaaa_plot.png")

元の画像(aaaa.png)・・・ペイントで適当に作った400x300の画像
aaaa.png

プロット後(aaaa_plot.png)
aaaa_plot.png

コード2 -- Pillowなし

import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
import pathlib

# 画像を読み込んでおく
f = cbook.get_sample_data(pathlib.Path("aaaa.png").absolute())
im = plt.imread(f)

# Figureとaxの準備 ... matplotlibの定型的な処理
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(1, 1, 1)

# 理由はわからないが、ax.invert_yaxis()を呼ばなくてもy軸は下を向く

# xとyはログから入手したタッチ座標。ここでは、暫定的に左上、中央、右下を指定している
x = [0, 400, 200]
y = [0, 300, 150]

# タッチ座標をプロットする
ax.scatter(x, y, c='red', s=20)

# 背景に画面イメージを出す
ax.imshow(im)

# プロット画像を保存する
plt.savefig("aaaa_plot2.png")

備考

この苦行、既視感があるな・・・と思ったら↓も近いやつだった。
正規表現にマッチした部分をExcelに書き出す + プロットする - Qiita
このときは画像に合わせる必要がなかった+他の人が生データを見る都合上、Excelにしてた。

参考

matplotlib - imshow で画像や配列を表示する方法 - Pynote
matplotlibのめっちゃまとめ - Qiita
python - matplotlib:画像imshowの座標をプロットと互換性がない - stackoverrun
AxesDivider — Matplotlib 2.0.2 documentation

0
4
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
0
4