パーティクルフィルタを用いた物体追跡の実装を行なっているのですが追跡精度を高めるためにまずフレーム差分法を用いて、動物体の抽出をおこなってからその動物体の周りにパーティクルをランダムに配置したいのですが、パーティクルを乱数を用いて適当に配置することはできるのですが、フレーム差分法を用いて抽出した動物体の周りにランダムに配置するということをコードに起こせず困っています。フレーム差分法から得た動物体の周りを指定してパーティクルを配置するにはどうすれば良いでしょうか。
当方python初心者なためお力添いをおねがいします。
実行環境
jupyter python
フレーム差分による物体検出を行うコードは以下になります
python
1import cv2 2import numpy as np 3import time 4 5i = 0 # カウント変数 6th = 30 # 差分画像の閾値 7 8# 動画ファイルのキャプチャ 9cap = cv2.VideoCapture("zverev1.mp4") 10 11# 最初のフレームを背景画像に設定 12ret, bg = cap.read() 13 14# グレースケール変換 15bg = cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY) 16 17while(cap.isOpened()): 18 # フレームの取得 19 ret, frame = cap.read() 20 21 # グレースケール変換 22 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 23 24 # 差分の絶対値を計算 25 mask = cv2.absdiff(gray, bg) 26 27 # 差分画像を二値化してマスク画像を算出 28 mask[mask < th] = 0 29 mask[mask >= th] = 255 30 31 # フレームとマスク画像を表示 32 cv2.imshow("Mask", mask) 33 cv2.imshow("Flame", gray) 34 cv2.imshow("Background", bg) 35 36 # 待機(0.03sec) 37 time.sleep(0.03) 38 i += 1 # カウントを1増やす 39 40 # 背景画像の更新(一定間隔) 41 if(i > 30): 42 ret, bg = cap.read() 43 bg = cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY) 44 i = 0 # カウント変数の初期化 45 46 # qキーが押されたら途中終了 47 if cv2.waitKey(1) & 0xFF == ord('q'): 48 break 49 50cap.release() 51cv2.destroyAllWindows()
回答1件
あなたの回答
tips
プレビュー