多种方法实现背景建模(基于opencv)

结果(200帧均值)

在这里插入图片描述

均值背景建模代码:

#include<stdio.h>
#include<iostream>
#include<list>
#include<opencv2/core.hpp>
#include<opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>   
using namespace cv;
using namespace std;


int main(int argc, char* argv[])
{
	string url = "test.avi";
	VideoCapture cap;
	if (!cap.open(url))
	{
		printf("the file open failed!\n");
		return -1;
	}
	//均值滤波的方法构建的背景模型是什么样子的。
	Mat frame;
	cap >> frame;
	printf("%d", frame.type());
	Mat AverageImage= Mat::zeros(frame.size(), CV_64FC3);
	Mat temp_frame;
	//过度掉开头效果更明显。
	for (int i = 0; i < 200; i++)
	{
		cap >> frame;
	}
	for (int i = 0; i < 200; i++)
	{
		cap >> frame;
		accumulate(frame, AverageImage);
	}
	AverageImage /= 200;
	AverageImage.convertTo(AverageImage, CV_8UC3);
	namedWindow("BG", WINDOW_NORMAL);
	imshow("BG", AverageImage);
	imwrite("BG_100F.jpg", AverageImage);
	waitKey(0);
}

混合高斯背景建模源码

#include "opencv2/opencv.hpp"
#include "opencv2/video/background_segm.hpp"

using namespace cv;
using namespace std;
int main()
{
	VideoCapture video("test.avi");
	int frameNum = 1;
	Mat frame, mask, thresholdImage, output;
	if (!video.isOpened())
		cout << "fail to open!" << endl;
	//cout<<video.isOpened();
	double totalFrameNumber = video.get(CAP_PROP_FRAME_COUNT);
	video >> frame;
	Ptr<BackgroundSubtractorMOG2> bgsubtractor = createBackgroundSubtractorMOG2();
	bgsubtractor->setVarThreshold(20); 
	for (int i = 0; i < 200; i++)
	{
		video >> frame;
	}
	for (int i = 0; i < 1000; i++)
	{
		if (totalFrameNumber == frameNum)
			break;
		video >> frame;
		++frameNum;
		//bgSubtractor(frame, mask, 0.001);
		bgsubtractor->apply(frame, mask, 0.01);
		namedWindow("BG", WINDOW_NORMAL);
		imshow("BG", mask);
		if (frameNum % 100 == 0)
		{
			Mat BG;
			bgsubtractor->getBackgroundImage(BG);
			imwrite(to_string(frameNum)+"BGmixed_Guess.jpg", BG);
		}
		waitKey(1);
	} 
	waitKey(0);
	return 0;
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值