Python版OpenCVでパーティクルフィルタを実装し、物体追跡する方法をソースコード付きで解説します。
パーティクルフィルタで物体追跡
パーティクルフィルタ(Particle filter)とは、確率分布による時系列データの予測手法です。
粒子フィルターや逐次モンテカルロ法とも呼ばれ、画像処理分野では物体追跡に利用されています。
今回はPython + OpenCV + NumPyでパーティクルフィルタを実装し、赤色の物体を追跡してみました。
404 NOT FOUND | Python入門速報
動画
ソースコード
サンプルプログラム(Python3 + OpenCV)のソースコードです。
実行結果
サンプルプログラムの実行結果です。
赤色の物体を追跡しています。
【Python版OpenCV入門】画像処理の基礎〜応用例までサンプルコード付きで徹底解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
コメント
追跡対象を赤から白に変更するにはどうすればよいでしょうか?
※ほげ様
コメントありがとうございます。
追跡対象の色を変更する場合はis_target関数内のroiの値域を変更します。
赤色のHue値は、だいたい30~150なので今サンプルプログラムでは(roi <= 30) | (roi >= 150)としています。
ただし、白色、灰色、黒色は無彩色なのでこの方法では検出できません。
ソースコード通りにやらせてもらいましたが、赤色の四角が上の実行結果通りにならず、まったく追ってくれません。。。なぜでしょうか
コメントありがとうございます。
対象の動き方によって、パラメータを調整する必要があります。
今回ですと、分散に従ってパーティクルを少し動かしていますが、分散の値を調整したり動かした方そのものを変えたりします。
ブログの例では、ゆっくり動かす分には追従できるのですが、速く動くと追従しなくなります。
どこのパラメタを調節すると早くても追従しやすくなりますか
webカメラでリアルタイムに追跡するにはどうしたらよいですか
cv2.VideoCapture(0)とすると、Webカメラの映像を処理します。