関連するコードを入れると役立ちます。また、実際に何を達成しようとしているのかを知ることもできます。
どの2つの画像を減算していますか? 後続の画像 (つまり、数分の 1 秒の遅延で撮影された画像) の減算を行いました。背景の減算は、通常、動きのあるオブジェクトのエッジ、たとえば手のエッジになり、シルエット全体ではありません。手。現在のフレームと静的な起動フレームの違いを取っていると思います。パーツが十分に異なっていない可能性があります (スキン + スキン)。
今夜、コンピューターに問題が発生しました。明日テストします (少なくとも、実際に実行する手順をすべて記載してください)。お知らせします。
最終的な目標が何であるかはまだわかりませんが、ジェスチャー認識を行いたいと思っていると思います(「指」と呼ばれるベクトルがあるため)。マンプリートが言ったように、あなたの最大の問題は堅牢性であり、それは似たような色の被写体からです.
静的な比較画像に私の顔を入れて移動することで、あなたの画像を再現しました。背景だけで始めた場合、それはすでにはるかに堅牢であり、いずれにせよ「オーバーレイ」は表示されませんでした.
簡単な修正は、被写体のないきれいな静止画像を用意することです。それ以外の場合は、動的な比較画像が必要になります。最も簡単なのは、frame_n と frame_n-1 を比較することです。ただし、これにより通常は動くエッジだけが得られるため、シルエット全体が必要な場合は、次のいずれかを実行できます。
1) 別のセグメンテーション アルゴリズムを使用する (これをお勧めします。バックグラウンド減算は高速であり、それを使用して検索対象のはるかに小さい ROI を決定し、別のアルゴリズムを使用してより堅牢なセグメンテーションを行うことができます。)
2) 過去 10 フレームの平均など、静的比較画像と動的比較画像の間で妥協点を作るようにしてください。これがどれほどうまく機能するかはわかりませんが、実装は非常に簡単で、試してみる価値があります:)。
また、しきい値に 30 の代わりに CV_THRESH_OTSU を試してみてください。
また、出力フレア (変更されていない領域が黒から白に切り替わる) が頻繁に発生することに気付きました。ライブ ストリームで確認すると、ウェブカメラのオートフォーカス/ホワイト バランスの調整などが原因であると確信しています。それも取得している場合は、オートフォーカスなどをオフにすると役立つはずです (ところで、これは openCV では行われませんが、おそらくこれを確認してください: How to programatically disable the auto-focus of a webcam? )