このページではpython-openCVを使って、以下の動画のように画像内で適当にマウスを動かした際の、
マウス位置座標履歴を以下のようにテキストファイルに出力する方法をご紹介していきます。
画像内物体の輪郭抽出なんかに役立つと思います。
それではさっそくやっていきましょう!
※Python(無料のプログラミング言語)のインストール~実行方法までは以下で解説しています。
使用するライブラリ一覧
今回もいつものようにこいつらを使用していきます。
◆OpenCV
◆numpy
※Anacondaを使っている人はnumpyはあらかじめインストールされているはずです。
openCVについては以下に参考記事を載せておきます。
マウス位置座標履歴をテキスト出力するサンプルコード
それでは冒頭に紹介した処理を実施してくれるサンプルコードをご紹介します。
※sample.jpgという画像ファイルがプログラム保存場所にあることを想定して書いています。
import cv2
import numpy as np
file_name='sample.jpg'
img=cv2.imread(file_name,cv2.IMREAD_GRAYSCALE)
txt_file='pos_xy.txt'
counter=0
def mouse_move(event, x, y, flags, params):
global counter,txt
if event == cv2.EVENT_LBUTTONDOWN and counter==0:
counter=1
txt=open(txt_file, 'w')
txt.write('x'+"\t"+'y'+"\n")
elif event == cv2.EVENT_MOUSEMOVE and counter==1:
img2 = np.copy(img)
cv2.circle(img2,center=(x,y),radius=5,color=255,thickness=-1)
txt.write(str(x)+"\t"+str(y)+"\n")
xy_str='('+str(x)+','+str(y)+')'
cv2.putText(img2,xy_str,(30, 50),cv2.FONT_HERSHEY_PLAIN,2,255,2,cv2.LINE_AA)
cv2.imshow('window', img2)
elif event == cv2.EVENT_LBUTTONDOWN and counter==1:
txt.close()
counter=0
cv2.imshow('window', img)
cv2.setMouseCallback('window', mouse_move)
cv2.waitKey(0)
cv2.destroyAllWindows()
使い方としては、
①履歴取得を開始したい場所で左クリック
②適当にマウスを動かす
③終了した場所で左クリック
(これでテキストに出力されています。)
④再計測した場合は①から繰り返す。
非常に簡単ですね。
出力結果の確認
先ほどのコードを実行すると以下のテキストファイルが出力されていました。
こいつをエクセルにはってグラフ化してみましょう。
なぞったもと画像は以下。
だいたいの輪郭を抽出できていますね。
おわりに
というわけで今回はpython-openCVを使って、画像内でマウスを動かした際の位置座標履歴を出力する方法をご紹介しました。
物体検出の際などにぜひご活用ください。
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント