。また、あなたが実際に達成しようとしていることを知っている。
あなたはどの2つの画像を減算していますか?私は後続の画像を減算しています(つまり、1秒の遅れで撮影された画像)、バックグラウンドの減算は、一般的に、移動するオブジェクトのエッジ、例えば手のエッジであり、シルエット全体ではありません。手。私はあなたが現在のフレームと静的な起動フレームの違いを取っていると思います。パーツが十分に異なっていない可能性があります(スキン+スキン)。
私は今夜コンピュータの問題を抱えています。私は明日テストします(少なくともあなたが実際に徹底的に実行する手順を立ててください)。
私はあなたが(あなたが「フィンガー」と呼ばれるベクトルを持っているので)いくつかのジェスチャー認識をしたい推測しているが、私は、まだあなたの究極の目標が何であるかわかりません。 Manpreetは言ったように、あなたの最大の問題は堅牢性であり、それは類似した色を持つ被写体からのものです。
静的な比較画像に顔を置き、移動してイメージを再現しました。私がバックグラウンドだけで始まっていれば、すでにはるかに堅牢で、どんな場合でも「オーバーレイ」は表示されませんでした。
クイックフィックスは、きれいな被写体のない静止画像があることを確認してください。 それ以外の場合は、ダイナミックな比較画像が必要です。最も簡単なのは、frame_nとframe_n-1を比較することです。これは一般的に動きのあるエッジを与えるので、全体のシルエットが必要な場合は、
1)別のセグメント化アルゴリズムを使用します(バックグラウンドの減算は高速です。はるかに小さいROIを検索し、より堅牢なセグメンテーションのために別のアルゴリズムを使用してください。)2)静的比較画像と動的比較画像の間で、過去10フレームの平均などの妥協を図ってください。そんな感じ。私はこれがどれくらいうまく動作しているのか分かりませんが、実装するのは非常に簡単で、試してみる価値があります:)
また、しきい値の代わりにCV_THRESH_OTSUを30に設定してみてください。それが良いかどうかを確認してください。
また、出力フレア(黒から白への切り替えを変更していない領域)によく気付きました。ライブストリームで確認すると、ウェブカメラのオートフォーカス/ホワイトバランス調整などのためにかなり確信しています。もしあなたもそれを得ているなら、オートフォーカスなどをオフにすると助けてくれるはずです(btwはopenCVではなくカメラによって異なります。おそらくこれをチェックしてください:How to programatically disable the auto-focus of a webcam?)
あなたは正しいです。静的な画像を撮ってから、ウェブカメラの検索画像からそれを差し引いてみてください。これは私のコードです... –
あなたは正しいです..静的な画像を撮ってから試してみますWebカメラのクエリーイメージからそれを減算するには...これは私のコードへのリンクです....助けてください。 http://www.2shared.com/document/0LaAP-mQ/subtraction.html –
あなたのコードに特化した答えを追加しました。これが役立つことを願って、あなたが本当に達成したいと思っていることに少し依存します。 特別な理由がない限り、openCVの新しいC++標準を採用することをお勧めします。つまり、画像にMatを使用することをお勧めします。 –