Python

【Python】画像中の座標を取得する方法

 

概要

画像系の機械学習を利用していると画像中の座標を取得したい場面が出てきます。

そこでPythonを用いたいくつかの手法について紹介したいと思います。

opencv

opencvのマウスイベントを活用してクリックした座標を取得します。

import cv2

def run():
	def mouse_event(event,x,y, flags, param):
		if event == cv2.EVENT_LBUTTONUP:
			points.append([x,y])
			print(x,y)
			cv2.circle(img, (x,y), 5, (255,0,0), -1)
	img = cv2.imread("<image_path>")
	points = []
	cv2.namedWindow("window", cv2.WINDOW_KEEPRATIO) 
	cv2.setMouseCallback("window", mouse_event) 
	while True:
		cv2.imshow("window", img) 
		if cv2.waitKey(1) & 0xFF == ord("z"):
			break
	cv2.destroyAllWindows()

if __name__ =="__main__":
    print("hello")
    run()

streamlit-drawable-canvas

streamlitの拡張であるstreamlit-drawable-canvasを活用します。

これは、webアプリ上で座標・線などを設定することができるもので、背景の画像の設定も可能です。

詳しくはこちらのデモがわかりやすいです。

何に使えそう?

物体検出のアノテーション

物体検出では、画像中のどこに物体が存在しているかをセットで学習します。そのため座標を取得してアノテーションを行います(イメージ:picacaのライブより

見守りシステム

人物の検出をした際に危険な場所にいないか、転倒の検知への活用が考えられます。例えば、ベッドの範囲をあらかじめ取得しておくことでその範囲外で人を検知した場合に転倒の可能性があるためアラートを送信するなどのユースケースがあると思います。

 

sato
データサイエンス事業部所属 寒さと生活が苦手