概要
ログに記録されたタッチ座標をそれに対応する画面イメージにひたすらプロットする
・・・という苦行が発生したのでそれを自動化する。
なお、x軸、y軸が描画され、画像のサイズも変わります。
[Python - Python3 座標を画像の上にプロット|teratail][5]
plt.imshowにより、プロットされた画像を確認できたのですが、それを
...
にてセーブすると、ピクセル数が変わってさらに余計な軸までついて、その周りに余白が現れます。
逆にそのほうが都合がいいという稀?なケース。
あとでわかったことですが、どうやらPillow(PIL)がなくてもできるようです。[リンク][4]
コード
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の画像
コード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][2]
このときは画像に合わせる必要がなかった+他の人が生データを見る都合上、Excelにしてた。
参考
[matplotlib - imshow で画像や配列を表示する方法 - Pynote][1]
[matplotlibのめっちゃまとめ - Qiita][3]
[python - matplotlib:画像imshowの座標をプロットと互換性がない - stackoverrun][4]
[AxesDivider — Matplotlib 2.0.2 documentation][6]
[1]:https://www.pynote.info/entry/matplotlib-imshow
[2]:https://qiita.com/int_main_void/items/f59d9e9f2a8d8f9c6b51
[3]:https://qiita.com/nkay/items/d1eb91e33b9d6469ef51
[4]:https://stackoverrun.com/ja/q/10393572
[5]:https://teratail.com/questions/139505
[6]:https://matplotlib.org/mpl_toolkits/axes_grid/users/axes_divider.html