このページでは、Python-OpenCVを使って、以下のように画像内の2点をクリックすることで、その2点間の距離(ユークリッド距離)を計測する方法をご紹介していきます。
始点を左クリックで指定し、終点を右クリックで指定するだけです。
非常に簡単ですね。
それではさっそくやっていきましょう。
※Python(無料のプログラミング言語)のインストール~実行方法までは以下で解説しています。
必要なライブラリ一覧
今回は以下のライブラリを使用していきます。
◆OpenCV
◆numpy
◆math
インストールしていない方はまずはインストールから始めましょう。
※Anacondaを使っている人はopenCV以外はあらかじめインストールされているはずです。
openCVについては以下に参考記事を載せておきます。
使用する画像の紹介
今回はいつものように以下の画像を使用していきます。
※今回は白黒画像であることを想定してコードを書いていますので、もしあなたがカラー画像で同じことを実行したい場合はいくつかコードを書き換える必要があります。
なお、この画像は1ピクセルが0.178mmであることがわかっています。
後程紹介するコードの中でもこの解像度を使用して距離を計測していきます。
クリックした2点間の距離を計測するサンプルコード
それでは本題に入っていきましょう。
早速ですが、以下が冒頭に紹介した動画の処理を実行できるサンプルコードです。
※先ほど紹介した画像がこのサンプルコードと同じ場所に保存されていることを前提に書いています。
import cv2
import numpy as np
import math
file_name='sample.jpg'
kaizo=0.178 #mm/piexl
img=cv2.imread(file_name,cv2.IMREAD_GRAYSCALE)
x1,y1=0,0
counter=1
def click_length(event, x, y, flags, params):
global x1,y1,img2,counter,kaizo
if event == cv2.EVENT_LBUTTONDOWN:
counter=0
x1=x
y1=y
elif event == cv2.EVENT_MOUSEMOVE and counter==0:
img2=np.copy(img)
cv2.circle(img2,center=(x1,y1),radius=5,color=255,thickness=-1)
cv2.line(img2,(x1,y1),(x,y),255, thickness=1, lineType=cv2.LINE_4)
cv2.imshow('window', img2)
elif event == cv2.EVENT_RBUTTONDOWN:
counter=1
img3=np.copy(img2)
x2=x
y2=y
piexl=math.sqrt((x1-x2)**2+(y1-y2)**2)
length=round(piexl*kaizo,3)
length_str=str(length)+'mm'
cv2.circle(img3,center=(x2,y2),radius=5,color=255,thickness=-1)
cv2.putText(img3,length_str,(30, 50),cv2.FONT_HERSHEY_PLAIN,2,255,2,cv2.LINE_AA)
cv2.imshow('window', img3)
cv2.imshow('window', img)
cv2.setMouseCallback('window', click_length)
cv2.waitKey(0)
cv2.destroyAllWindows()
基本的には、4、5行目の画像のファイル名、解像度をあらかじめ指定し、コードを実行するだけでOKです。
サンプルコードの使い方
最後に先ほどのサンプルコードの使い方を説明しておきます。
①コードを実行すると先ほどの画像がWindow上に現れます。
②距離計測の始点となる場所を左クリックします。
③終点となる場所にマウスを移動し右クリックします。
⇒これで左上に計測結果が表示されます。
④再度計測したい場合はまた②③を実施すればOKです。
念のためもう一度動画を載せておきます。
おわりに
というわけで今回はpython-openCVを使って、画像内のクリックした2点間の距離を計測する方法をご紹介しました。
実験データの分析の際などにぜひご活用ください。
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント