質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

534閲覧

パーティクルフィルタを用いた物体追跡におけるパーティクルの配置について

lix__

総合スコア5

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/08/24 12:57

編集2022/09/10 01:30

パーティクルフィルタを用いた物体追跡の実装を行なっているのですが追跡精度を高めるためにまずフレーム差分法を用いて、動物体の抽出をおこなってからその動物体の周りにパーティクルをランダムに配置したいのですが、パーティクルを乱数を用いて適当に配置することはできるのですが、フレーム差分法を用いて抽出した動物体の周りにランダムに配置するということをコードに起こせず困っています。フレーム差分法から得た動物体の周りを指定してパーティクルを配置するにはどうすれば良いでしょうか。
当方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()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2022/08/24 13:17

現状できているまでのコード、せめて動物体の抽出ができているところまでを提示されないと なかなかアドバイスしにくいかと思います。
lix__

2022/08/24 13:36

ご意見ありがとうございます。 コードとイメージを載せておきます。
jbpb0

2022/08/24 14:39

コードはここに書くのではなく、質問を編集して追記してください
jbpb0

2022/08/24 22:13

> 質問投稿後の画像の添付方法がわからなかった 質問を編集する画面でできます
lix__

2022/08/25 02:09

ありがとうございます。変更させていただきます。ご迷惑おかけしました。
jbpb0

2022/08/25 02:56

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
lix__

2022/08/25 03:22

ご指摘ありがとう語彙ざいます。 なるべく自分で解決できるよう引き続き作業に取り組みます。
jbpb0

2022/08/25 03:28

質問に追記していただいたコードですが、「while」や「if」の下にインデントが無いし、 if(i > 30): ret, bg = cap.read() はおそらく二つの行が一つになってしまっていると思われるし、このままだと実行できないので、実行できるように直してください
lix__

2022/08/25 03:35

変更しました。 ご指摘ありがとうございます
jbpb0

2022/08/29 10:32 編集

https://algorithm.joho.info/programming/python/opencv-particle-filter-py/ のコードでは、「initialize()」で全パーティクルを同じ座標で初期化してるようです その座標は、「max_moment_point()」内で「cv2.connectedComponentsWithStats()」で取得してて、コードのコメントには「中心座標」と書かれてますけど、「重心」のようです
guest

回答1

0

ベストアンサー

抽出した動物体の周りにランダムに配置

【Python/OpenCV】パーティクルフィルタで物体追跡
のコードでは、「initialize()」で全パーティクルを同じ座標で初期化してるようです
その座標は、「max_moment_point()」内で「cv2.connectedComponentsWithStats()」で取得してて、コードのコメントには「中心座標」と書かれてますけど、「重心」のようです

python + numpyで緑色の物体を追跡する (パーティクルフィルタ)
のコードでも、「init_particles()」で全パーティクルを同じ座標で初期化してるようです
その座標は、「cv2.boundingRect()」で取得した外接矩形の中心座標のようです

投稿2022/09/09 16:30

jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問