0

前景画像をすばやく取得する方法を教えてもらえますか?

現在、これを行うために BackgroundSubtractorMOG2 クラスを使用しています。非常に遅いです。私の仕事はそれほど複雑なアルゴリズムを必要としません。

どんちゃん騒ぎで背景の画像を取得できます。カメラの位置は変わりません。だから私はこれを行う簡単な方法があると信じています。

カメラの前を移動するオブジェクトのブロブをキャプチャする必要があります。オブジェクトは常に 1 つだけです。

4

1 に答える 1

4

次の簡単な解決策を実行することをお勧めします。

  1. 差分行列を計算します。

    • cv::absdiff(フレーム、背景、absDiff);

    これにより、absDiff の各ピクセル (i,j) が |frame(i,j) - background(ij)| に設定されます。各チャネル (R、G、B など) は個別に処理されます。

  2. 結果をシングル チャネルのモノカラー イメージに変換します。

    • cv::cvtColor(absDiff, absDiffGray, cv::COLOR_BGR2GRAY);
  3. バイナリ フィルターを適用します。

    • cv::threshold(absDiffGray, absDiffGrayThres, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

    ここでは、Ots'u メソッドを使用して、適切なしきい値レベルを決定しました。ステップ 2 からのノイズがあれば、バイナリ フィルターがそれを除去します。

  4. absDiffGrayThres 画像にブロブ検出を適用します。これは、値が 255 であるピクセル位置を探す、組み込みの opencv メソッドまたは手動で作成されたコードの 1 つです (高速な opencv ピクセル検索操作について思い出してください)。

このようなプロセスは、かなり古い Core 2 Duo 2.1 GHz、4 GB RAM、GPU サポートなしで、少なくとも 30 fps のフレーム レートで 640x480 RGB 画像を処理するのに十分な速さです。


ハードウェアの注意: カメラのレンズの絞りが自動調整に設定されていないことを確認してください。次の状況を想像してください: 最初に背景画像を計算しました。次に、何かのオブジェクトが現れ、カメラ ビューの大部分をカバーします。レンズに入る光が少なくなり、オートライト調整により、カメラが絞りを大きくし、背景色が変化し、実際にはオブジェクトがない場所に違いが生じます。

于 2013-06-18T13:50:20.307 に答える