現在、カメラが円を検出した場合何秒写っていたかを計測するプログラムを作成しています。コードは以下の通りです。
import numpy as np import cv2 import time import csv f = open("cl_save.csv","a") csvWriter = csv.writer(f) cap = cv2.VideoCapture(0) start = None while True: ret, frame = cap.read() if not ret: break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray1 = cv2.GaussianBlur(gray, (5, 5), 1) circles = cv2.HoughCircles(gray1, cv2.HOUGH_GRADIENT, 1, 60, param1=10, param2=85, minRadius=0, maxRadius=85) if circles is not None and start is None: start = time.time() circles = np.uint16(np.around(circles)) for i in circles[0,:]: cv2.circle(frame,(i[0],i[1]),i[2],(0,0,0),2) cv2.circle(frame,(i[0],i[1]),2,(0,0,0),3) if circles is not None and start is not None: circles = np.uint16(np.around(circles)) for i in circles[0,:]: cv2.circle(frame,(i[0],i[1]),i[2],(0,0,0),2) cv2.circle(frame,(i[0],i[1]),2,(0,0,0),3) elif circles is None and start is not None: elapsed_time = time.time() - start print(elapsed_time) listData = [] listData.append(str(elapsed_time)) csvWriter.writerow(listData) start = None cv2.imshow('preview', gray1) key = cv2.waitKey(10) if key == ord("q"): break cv2.destroyAllWindows()
動かしてみたところ、時間を計測するようになったものの、前のフレームで円があったかなかったかでしか評価していないため、個々の円の時間は計測できていませんでした。そこで、円を中心座標により区別し、各座標でフレーム間処理を行えるようにしようと考えました。しかし、あまりプログラムに詳しくなく、どのように上記の内容を実現すればいいかわかりませでした。
OpenCV3にはラベリングパッケージがあることがわかったのですが、以下のサイトを見たところ、私がやろうとしていた検出した円を区別できるようにするためには使えないということがわかりました。
OpenCV3.0kから入ったラベリング処理について
検出した円を中心座標により区別し、各座標でフレーム間処理(時間計測)を行う場合、どのようにすれば検出した円の座標を保存できるのか、また、そもそも私が作成したいプログラムは実現可能なのか教えていただけると助かります。
長文かつわかりづらい文章となってしまい申し訳ありません。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/19 02:22