1

画像のストリームが取り込まれている ConcurrentQueue があります。簡単にするために、それらはウェブカメラからのフレームであると仮定します。

私が理想的にやりたいことは、検出することです

  • 少しでも動きがあれば
  • 最大の (速度ではなくサイズによる) モーションがフレーム内にある場所
  • フレーム内で 2 番目に大きなモーションがある場所

おそらく、最後のNフレームにわたって参照画像を合成する必要があります(昼/夜、駐車中の車などの半永久的な変化が考慮されるように)。次に、現在のフレームと参照フレームを区別します。

フレームには (最小限の) レベルのノイズがあるため、正確な色比較は実行可能なオプションではありません。

私は以前にこれに関するチュートリアルを見たことがあると確信していますが(大きな動きの領域の周りの「ボックス」で最高潮に達します)、今はそれらを見つけることができません.

誰かがまともなアルゴリズム/チュートリアルを教えてくれますか?

4

1 に答える 1

1

動作するソリューションが必要な場合は、ZoneMinderまたはMotionは、video4linuxインターフェイスを使用してLinuxで実行される2つのソフトウェアです。

何らかの理由で自分でロールする必要がある場合は、使用できるテクニックや戦略がたくさんあります。あなたは、あなたが概説したことで、おおむね正しい軌道に乗っています。ただし、いくつかの重要な詳細が欠落しています。

  1. カメラは静止しているので、最後のNフレームを「背景」画像として記録しておきます。それらすべてを平均します。

    http://opencv.willowgarage.com/documentation/cpp/imgproc_motion_analysis_and_object_tracking.html

  2. 現在の画像から背景を引きます。残されたものをフォアグラウンドと呼びます。

    http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#cv-absdiff

  3. オプションで、拡張または侵食(またはその両方)を実行して、ノイズを除去するか、ほぼ接続領域を結合します。

    http://opencv.willowgarage.com/documentation/image_filtering.html#dilate

  4. 前景画像のしきい値を設定して、何が重要で何が重要でないかを判断します。

    http://docs.opencv.org/doc/tutorials/imgproc/threshold/threshold.html

  5. 必要に応じて、findContours関数を使用して、「移動」されたものの説明を取得します

    http://docs.opencv.org/doc/tutorials/imgproc/shapeescriptors/find_contours/find_contours.html

    輪郭ができたら、それが目的の場合は、境界の長方形を見つけることもできます。

    http://opencv.willowgarage.com/documentation/python/structural_analysis_and_shape_descriptors.html#boundingrect

これは完全ではありません。デバッグまたは最適化するときは、すべてのステップの後に出力を表示して、何が正しく機能していて何が機能していないかを把握する必要があります。それを簡単にするために、インフラストラクチャの構築に時間を費やしてください。ソースデータがあり、必要な結果を得るためのパイプラインチューニングのほとんどが機能していれば、かなり実行可能です。

于 2012-12-11T04:18:51.013 に答える