web-dev-qa-db-ja.com

OpenCVでcv :: BackgroundSubtractorMOGを使用する方法は?

私はOpenCV2.2を使用して、背景減算の方法で移動オブジェクトの検出を実装しています。また、ガウス混合モデル(GMM)法を使用して、背景の参照画像をモデル化します。

OpenCV2.2で提供されているクラスcv :: BackgroundSubtractorMOGを使用して、前景ピクセル(または前景マスク)を直接取得します。便利ですが、cv :: BackgroundSubtractorMOGによって返される前景マスクは思ったほど良くありません。さらに、cv :: BackgroundSubtractorMOGは、OpenCV1.0で提供されているC言語で記述されたGMMの方法よりもパフォーマンスが低いようです。

以下は、OpenCV2.2の私のコードです。

cv::BackgroundSubtractorMOG mog;
mog(frame, fgMask, 0.01);

それで、私は間違った方法でメソッドを使用しましたか?

ちなみに、cv :: BackgroundSubtractorMOGは前景ピクセルの影の除去を実行しますか?

どうもありがとうございました。

13
visualassit

Mogを作成するときは、パラメーターを定義していないため、デフォルトのパラメーターを使用して作成されます。 ここ 各パラメータの説明があります。たぶんそれだけです。 3、45ガウスで試してください。

この関数はシャドウ除去を実行しませんが、 this 他の関数が実行します。幸運を!

12
Jav_Rock

OpenCVの標準GMM実装よりもはるかに優れた背景の除去(前景の検出)を行う最近のアルゴリズムがあります。

たとえば、 このジャーナル記事 で説明されているブロックベースの分類子カスケードアプローチと、そのC++ベースの ソースコード があります。

5
mtall

このスレッド に関するF.X.の回答は、

backgroundSubtractor = new BackgroundSubtractorMOG(3, 4, 0.8);
1
austin

開始するには、次の設定を使用することをお勧めします。次に、パラメータの調整を開始できます。

cv::BackgroundSubtractorMOG2 mog;
mog(rawFrame,foregroundFrame,-1);
mog.set("nmixtures", 3);
mog.set("detectShadows",1);   

この例では、MOG2減算器を3つのガウス混合で設定しました。影の検出も有効にしました。