【Python-openCV】画像内でクリックした2点間の距離を計測する方法!

このページでは、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点間の距離を計測する方法をご紹介しました。

 

実験データの分析の際などにぜひご活用ください。

 

このように、私のブログでは様々なスキルを紹介しています。

過去記事一覧

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村 IT技術ブログへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました