できていること
動画を読み込み物体を追跡するプログラムになっています。
実際に追跡する関数serchpoint は省略させてもらっています
serchpointはグレースケールの画像を入力とし、追跡対象の重心座標を出力します。
そして、その座標をもとに点をプロットするというものです。
python
1import numpy as np 2import cv2 3cap = cv2.VideoCapture("video.mp4") 4ret, frame = cap.read() 5cv2.namedWindow("window") 6 7#関数 serchpoint の定義は省略させてもらっています 8 9while ret == True: 10 # グレースケール変換 11 gframe = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 12 cframe = cv2.cvtColor(frame, cv2.IMREAD_COLOR) 13 #座標を出力 14 x,y=serchpoint(gframe) 15 16 cv2.circle(cframe, (x,y), 2, (0, 0, 255), -1) 17 18 19 # フレーム表示 20 cv2.imshow("window", cframe) 21 key = cv2.waitKey(INTERVAL) 22 if key == ESC_KEY: 23 break 24 25 # 次のフレーム読み込み 26 ret, frame = cap.read() 27 28# 終了処理 29cv2.destroyAllWindows() 30cap.release()
###できていないこと
軌跡の描画です。別の静止画などに座標をプロットしていけば、もちろんどのような軌跡になるのかというのはわかります。
できていないのは動画の上に軌跡を描画することです。cframeに点を描画をしてもwhile文の最後の部分で更新されてしまうので軌跡にはなりません。
やはり、「重心座標をリストの中に次々に格納していき、描画するタイミングでそのリストに格納されているすべての座標を描画する」というようなことしかできないのでしょうか?これでは座標の数が多くなればなるほど重くなりますよね、、
何かいい方法があれば教えていただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。