この記事ではpython-openCVを使って、以下の動画のように画像内でクリックした場所の座標をリアルタイムに表示する方法をご紹介していきます。
何かしらの追加処理を行う際の座標確認にぜひご活用ください。
※python&openCVの使い方について知りたい方はまずは以下をご覧ください。
それではさっそくやっていきましょう。
必要なライブラリ
〇openCV
〇numpy
いつもおなじみの2つですね。
インストールしていない方はまずはインストール作業から始めましょう。
画像内クリック位置の座標を表示するサンプルコード
さっそくですが、以下が冒頭に紹介した作業を実行してくれるサンプルコードです。
※このコードの保存場所と同じフォルダに入っているmouse.jpgという画像に対して実行していきます。
import cv2
import numpy as np
file_name='mouse.jpg'
img=cv2.imread(file_name,cv2.IMREAD_GRAYSCALE)
def click_pos(event, x, y, flags, params):
if event == cv2.EVENT_LBUTTONDOWN:
img2 = np.copy(img)
cv2.circle(img2,center=(x,y),radius=5,color=255,thickness=-1)
pos_str='(x,y)=('+str(x)+','+str(y)+')'
cv2.putText(img2,pos_str,(x+10, y+10),cv2.FONT_HERSHEY_PLAIN,2,255,2,cv2.LINE_AA)
cv2.imshow('window', img2)
cv2.imshow('window', img)
cv2.setMouseCallback('window', click_pos)
cv2.waitKey(0)
cv2.destroyAllWindows()
基本的にやっていることは以下の通りです。
①画像の読み込み
②読み込んだ画像を別windowで表示
③②のwindow内でクリックされた位置の座標を取得
④座標の数値とプロットを元画像に描写して再度windowに表示
サンプルコードの実行結果
それでは先ほどのサンプルコードを実行してみましょう。
実行するとまずは以下のように別windowが表示されます。
この状態で画像内の適当な場所をクリックしてみましょう。
問題なく座標を取得できていそうですね。
マウス移動だけで座標表示したい場合
さきほどのサンプルコードはクリックした際に座標を表示するというものでしたが、以下の動画ようにマウス移動に連動して座標を表示させることも可能です。
以下がそのサンプルコードです。
import cv2
import numpy as np
file_name='mouse.jpg'
img=cv2.imread(file_name,cv2.IMREAD_GRAYSCALE)
def mouse_move(event, x, y, flags, params):
if event == cv2.EVENT_MOUSEMOVE:
img2 = np.copy(img)
cv2.circle(img2,center=(x,y),radius=5,color=255,thickness=-1)
pos_str='(x,y)=('+str(x)+','+str(y)+')'
cv2.putText(img2,pos_str,(30, 30),cv2.FONT_HERSHEY_PLAIN,2,255,2,cv2.LINE_AA)
cv2.imshow('window', img2)
cv2.imshow('window', img)
cv2.setMouseCallback('window', mouse_move)
cv2.waitKey(0)
cv2.destroyAllWindows()
基本的には呼び出す関数で使っているイベントを
cv2.EVENT_LBUTTONDOWN(左クリック)からcv2.EVENT_MOUSEMOVE(マウス移動)に変えただけですね。
状況に応じて使い分けていきましょう。
おわりに
というわけで今回はpython-openCVを使って、画像内の座標を取得する方法をご紹介しました。
画像処理の際などにぜひご活用ください。
以下の記事では今回紹介した内容を応用して様々なことを行っています。
興味があればこちらもあわせてご覧ください。
【python-openCV】画像内を3点クリック⇒なす角を計算する方法!
【Python-openCV】画像内でクリックした2点間の距離を計測する方法!
【python-openCV】クリックした位置の色(BGR値)を連続取得する方法!
【python-openCV】画像内のクリックした位置の輝度を取得する方法!
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント
有用すぎてびっくりです!
OCRでクロップする際にペイントでやっていたことなので
大変楽になります。感謝です。
うれしいコメントありがとうございます(^^)
他にもいろいろ作ってるので是非とも巡回してみてください👍