OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
背景差分法の使い方

前のチュートリアル: 高レベルのスティッチングAPI (Stitcher クラス)
次のチュートリアル: MeanshiftとCamshift

原著者Domenico Daniele Bloisi
互換性OpenCV >= 3.0
  • 背景差分 (Background subtraction, BS) は、固定カメラを用いて前景マスク (foreground mask、すなわちシーン中の動いている物体に属するピクセルを含む2値画像) を生成するために広く使われている一般的な手法である。
  • その名のとおり、BSは現在のフレームと背景モデルとの差分を計算して前景マスクを求める。背景モデルにはシーンの静的な部分、あるいはより一般的には観測対象シーンの特性から背景とみなせるあらゆるものが含まれる。
  • 背景モデリングは、主に次の2つのステップから成る。

    1. 背景の初期化 (Background Initialization)
    2. 背景の更新 (Background Update)

    最初のステップでは背景の初期モデルを計算し、2番目のステップではシーンに起こりうる変化に適応させるためにそのモデルを更新する。

  • このチュートリアルでは、OpenCVを用いてBSを行う方法を学ぶ。

目標

このチュートリアルでは、以下の方法を学ぶ:

  1. cv::VideoCapture を用いて動画または画像シーケンスからデータを読み込む。
  2. cv::BackgroundSubtractor クラスを用いて背景モデルを作成・更新する。
  3. cv::imshow を用いて前景マスクを取得・表示する。

コード

以下にソースコードを示す。ユーザーが動画ファイルと画像シーケンスのどちらを処理するか選択できるようにする。

このサンプルでは前景マスクの生成に cv::BackgroundSubtractorMOG2 を使用する。

結果と入力データの両方が画面に表示される。

解説

上記コードの主要な部分について説明する。

  • 前景マスクの生成には cv::BackgroundSubtractor オブジェクトを使用する。この例ではデフォルトのパラメータを使用しているが、create関数で特定のパラメータを指定することも可能である。
  • 入力動画または入力画像シーケンスの読み込みには cv::VideoCapture オブジェクトを使用する。
  • 各フレームは前景マスクの計算と背景の更新の両方に使用される。背景モデルの更新に用いる学習率を変更したい場合は、apply メソッドにパラメータを渡すことで特定の学習率を設定できる。
  • 現在のフレーム番号は cv::VideoCapture オブジェクトから取得でき、現在のフレームの左上隅に描画される。黒色のフレーム番号を見やすくするために白い矩形を使用している。
  • これで現在の入力フレームと結果を表示する準備が整った。

結果

  • vtest.avi 動画について、次のフレームの場合

MOG2手法の場合、プログラムの出力は次のようになる (灰色の領域は検出された影である)。

KNN手法の場合、プログラムの出力は次のようになる (灰色の領域は検出された影である)。

参考文献