1. 在处理视频对象中,通常要区分开前景物体和背景物体,opencv中提供了一种高斯混合背景建模的方法,函数调用为BackgroundSubtractorMOG ,可以有效地检测视频中运动的物体。
源码:
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/video/video.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat frame;//视频帧文件
Mat foreground; // 前景图片
VideoCapture capture("car.avi");
if (!capture.isOpened())
{
return 0;
}
namedWindow("提取出的前景");
namedWindow("原视频");
// 混合高斯物体
BackgroundSubtractorMOG mog;
bool stop(false);
while (!stop)
{
if (!capture.read(frame))
{
break;
}
// 更新背景图片并且输出前景,参数为:输入图像、输出图像、学习速率
mog(frame, foreground, 0.01);
// 二值化,物体为黑色,背景为白色
threshold(foreground, foreground, 100, 255, THRESH_BINARY_INV);
// show foreground
imshow("提取出的前景", foreground);
imshow("原视频", frame);
if (waitKey(10) == 27)
{
stop = true;
}
}
}