理论
- 背景减法(BS)是用于通过使用静态相机生成前景蒙版(即,包含属于场景中的运动对象的像素的二值图像)的常用且广泛使用的技术。
- 顾名思义,BS计算前景蒙版,在当前帧和背景模型之间执行减法,包含场景的静态部分,或者更一般地说,考虑到观察场景的特征,可以将所有内容视为背景。
![](https://i-blog.csdnimg.cn/blog_migrate/4737b269bcdd7c0725c7f7cbec920d3c.png)
- 背景建模包括两个主要步骤:
- 背景初始化;
- 背景更新。
- 在第一步中,计算背景的初始模型,而在第二步中更新模型以适应场景中的可能变化。
代码
//opencv
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/video.hpp>
//C
#include <stdio.h>
//C++
#include <iostream>
#include <sstream>
using namespace cv;
using namespace std;
// Global variables
Mat frame; //current frame
Mat fgMaskMOG2; //fg mask fg mask generated by MOG2 method
Ptr<BackgroundSubtractor> pMOG2; //MOG2 Background subtractor
int keyboard; //input from keyboard
void help();
void processVideo(char* videoFilename);
void processImages(char* firstFrameFilename);
void help()
{
cout
<< "--------------------------------------------------------------------------" << endl
<< "This program shows how to use background subtraction methods provided by " << endl
<< " OpenCV. You can process both videos (-vid) and images (-img)." << endl
<< endl
<< "Usage:" << endl
<< "./bs {-vid <video filename>|-img <image filename>}" << endl
<< "for example: ./bs -vid video.avi"