Opencv视频分析---使用背景减法方法

理论

  • 背景减法(BS)是用于通过使用静态相机生成前景蒙版(即,包含属于场景中的运动对象的像素的二值图像)的常用且广泛使用的技术。
  • 顾名思义,BS计算前景蒙版,在当前帧和背景模型之间执行减法,包含场景的静态部分,或者更一般地说,考虑到观察场景的特征,可以将所有内容视为背景。Opencv视频分析---使用背景减法方法_第1张图片
  • 背景建模包括两个主要步骤:
  1. 背景初始化;
  2. 背景更新。
  • 在第一步中,计算背景的初始模型,而在第二步中更新模型以适应场景中的可能变化。

代码

//opencv
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include 
#include 
//C
#include 
//C++
#include 
#include 
using namespace cv;
using namespace std;
// Global variables
Mat frame; //current frame
Mat fgMaskMOG2; //fg mask fg mask generated by MOG2 method
Ptr 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 

解释

  • 首先,分配三个Mat对象来存储当前帧和两个前景掩码,这两个前景掩码通过使用两种不同的BS算法获得。
  • 两个cv :: BackgroundSubtractor对象将用于生成前景蒙版。 使用默认参数,但也可以在create函数中声明特定参数。
  • 分析命令行参数。 用户可以选择两个选项:
  1. 视频文件(通过选择-vid选项);
  2. 图像序列(通过选择-img选项)。Opencv视频分析---使用背景减法方法_第2张图片
  • 假设您要处理视频文件。 读取视频直到到达终点或用户按下按钮“q”或按钮“ESC”。
  • 每个帧都用于计算前景蒙版和更新背景。 如果要更改用于更新背景模型的学习速率,可以通过将第三个参数传递给“apply”方法来设置特定的学习速率。
  • 当前帧编号可以从cv :: VideoCapture对象中提取并标记在当前帧的左上角。 白色矩形用于突出显示黑色框架编号。Opencv视频分析---使用背景减法方法_第3张图片
  • 我们准备显示当前的输入框架和结果。
  • 可以使用一系列图像作为输入来执行上面列出的相同操作。 调用processImage函数,而不是使用cv :: VideoCapture对象,在为下一帧读取的正确路径个别化之后,使用cv :: imread读取图像。Opencv视频分析---使用背景减法方法_第4张图片

效果

  • 给定以下输入参数:
  • 程序的输出如下所示:Opencv视频分析---使用背景减法方法_第5张图片
  • The video file Video_001.avi is part of the Background Models Challenge (BMC) data set and it can be downloaded from the following link Video_001 (about 32 MB).
  • 如果要处理一系列图像,则必须选择“-img”选项:
  • 程序的输出如下所示:Opencv视频分析---使用背景减法方法_第6张图片
  • 为了保存输出图像,我们可以使用cv :: imwrite。 添加以下代码可以保存前景蒙版。

你可能感兴趣的:(OpenCV教程)