OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
如何使用背景減除方法

上一個教程: 高階影像拼接API (Stitcher 類)
下一個教程: 均值漂移和Camshift

原始作者Domenico Daniele Bloisi
相容性OpenCV >= 3.0
  • 背景減除 (BS) 是一種常用且廣泛使用的技術,透過使用靜態攝像機生成前景掩碼(即,一個包含場景中移動物件畫素的二值影像)。
  • 顧名思義,BS 透過對當前幀和背景模型進行減法運算來計算前景掩碼,背景模型包含場景的靜態部分,或者更普遍地說,根據觀察到的場景特徵,可以被視為背景的所有內容。
  • 背景建模包括兩個主要步驟

    1. 背景初始化;
    2. 背景更新。

    第一步是計算背景的初始模型,而第二步是更新該模型,以適應場景中可能的變化。

  • 在本教程中,我們將學習如何使用 OpenCV 進行背景減除。

目標

在本教程中,您將學習如何

  1. 使用影片或影像序列讀取資料,透過使用 cv::VideoCapture
  2. 建立和更新背景模型,透過使用 cv::BackgroundSubtractor 類;
  3. 獲取並顯示前景掩碼,透過使用 cv::imshow

程式碼

您可以在下面找到原始碼。我們將允許使用者選擇處理影片檔案或影像序列。

在此示例中,我們將使用 cv::BackgroundSubtractorMOG2 來生成前景掩碼。

結果和輸入資料都會顯示在螢幕上。

解釋

我們討論上面程式碼的主要部分

  • 一個 cv::BackgroundSubtractor 物件將用於生成前景掩碼。在此示例中,使用了預設引數,但也可以在建立函式中宣告特定引數。
  • 一個 cv::VideoCapture 物件用於讀取輸入影片或輸入影像序列。
  • 每一幀都用於計算前景掩碼和更新背景。如果要更改用於更新背景模型的學習率,可以透過向 apply 方法傳遞引數來設定特定的學習率。
  • 當前幀號可以從 cv::VideoCapture 物件中提取,並標記在當前幀的左上角。使用一個白色矩形來突出顯示黑色的幀號。
  • 我們準備好顯示當前的輸入幀和結果。

結果

  • 使用 vtest.avi 影片,對於以下幀

MOG2 方法的程式輸出如下所示(灰色區域是檢測到的陰影)

KNN 方法的程式輸出如下所示(灰色區域是檢測到的陰影)

參考文獻