混合高斯模型去除背景
来源:互联网 发布:比较两个数组的差异 编辑:程序博客网 时间:2024/05/22 13:34
本文转自 http://www.cnblogs.com/mfryf/archive/2012/03/29/2424024.html
基于混合高斯模型去除背景法
高斯模型去除背景法也是背景去除的一种常用的方法,经常会用到视频图像侦测中。这种方法对于动态的视频图像特征侦测比较适合,因为模型中是前景和背景分离开来的。分离前景和背景的基准是判断像素点变化率,会把变化慢的学习为背景,变化快的视为前景。
#include "stdafx.h"#include "cv.h"#include "highgui.h"#include "cxtypes.h"#include "cvaux.h"# include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ //IplImage* pFirstFrame = NULL;IplImage* pFrame = NULL;IplImage* pFrImg = NULL;IplImage* pBkImg = NULL;IplImage* FirstImg = NULL;static IplImage* pyrImg =NULL;CvCapture* pCapture = NULL;int nFrmNum = 0;int first = 0,next = 0;int thresh = 0;cvNamedWindow("video",0);//cvNamedWindow("background",0);cvNamedWindow("foreground",0);cvResizeWindow("video",400,400);cvResizeWindow("foreground",400,400);//cvCreateTrackbar("thresh","foreground",&thresh,255,NULL);//cvMoveWindow("background",360,0);//cvMoveWindow("foregtound",0,0);if(!(pCapture = cvCaptureFromCAM(1))){printf("Could not initialize camera , please check it !");return -1;}CvGaussBGModel* bg_model = NULL;while(pFrame = cvQueryFrame(pCapture)){nFrmNum++;if(nFrmNum == 1){pBkImg = cvCreateImage(cvGetSize(pFrame),IPL_DEPTH_8U,3);pFrImg = cvCreateImage(cvGetSize(pFrame),IPL_DEPTH_8U,1);FirstImg = cvCreateImage(cvGetSize(pFrame),IPL_DEPTH_8U,1);pyrImg = cvCreateImage(cvSize(pFrame->width/2,pFrame->height/2),IPL_DEPTH_8U,1);CvGaussBGStatModelParams params;params.win_size = 2000; //Learning rate = 1/win_size;params.bg_threshold = 0.7; //Threshold sum of weights for background testparams.weight_init = 0.05;params.variance_init = 30;params.minArea = 15.f;params.n_gauss = 5;//= K =Number of gaussian in mixtureparams.std_threshold = 2.5;//cvCopy(pFrame,pFirstFrame,0);bg_model = (CvGaussBGModel*)cvCreateGaussianBGModel(pFrame,¶ms);}else{int regioncount = 0;int totalNum = pFrImg->width *pFrImg->height ;cvSmooth(pFrame,pFrame,CV_GAUSSIAN,3,0,0,0);cvUpdateBGStatModel(pFrame,(CvBGStatModel*)bg_model,-0.00001);cvCopy(bg_model->foreground ,pFrImg,0);cvCopy(bg_model->background ,pBkImg,0);//cvShowImage("background",pBkImg);//cvSmooth(pFrImg,pFrImg,CV_GAUSSIAN,3,0,0,0);//cvPyrDown(pFrImg,pyrImg,CV_GAUSSIAN_5x5);//cvPyrUp(pyrImg,pFrImg,CV_GAUSSIAN_5x5);//cvSmooth(pFrImg,pFrImg,CV_GAUSSIAN,3,0,0,0);cvErode(pFrImg,pFrImg,0,1);cvDilate(pFrImg,pFrImg,0,3);//pBkImg->origin = 1;//pFrImg->origin = 1;cvShowImage("video",pFrame);cvShowImage("foreground",pFrImg);//cvReleaseBGStatModel((CvBGStatModel**)&bg_model);//bg_model = (CvGaussBGModel*)cvCreateGaussianBGModel(pFrame,0);/*//catch target frameif(nFrmNum>10 &&(double)cvSumImage(pFrImg)>0.3 * totalNum){first = cvSumImage(FirstImg);next = cvSumImage(pFrImg);printf("Next number is :%d /n",next);cvCopy(pFrImg,FirstImg,0);}cvShowImage("foreground",pFrImg);cvCopy(pFrImg,FirstImg,0);*/if(cvWaitKey(2)== 27){break;}}}cvReleaseBGStatModel((CvBGStatModel**)&bg_model);cvDestroyAllWindows();cvReleaseImage(&pFrImg);cvReleaseImage(&FirstImg);cvReleaseImage(&pFrame);cvReleaseImage(&pBkImg);cvReleaseCapture(&pCapture);return 0;}
1 0
- 混合高斯模型去除背景
- C/C++ 图像处理(17)------基于混合高斯模型去除背景法
- 混合高斯模型背景建模算法
- 背景建模之高斯混合模型
- 背景建模--高斯混合模型
- 混合高斯模型背景建模原理
- 背景建模--高斯混合模型
- OPENCV中混合高斯背景模型的实现
- OPENCV中混合高斯背景模型的实现
- opencv2.3混合高斯模型背景显示
- OPENCV中混合高斯背景模型的实现
- opencv2.3混合高斯模型背景显示
- 混合高斯背景模型及opencv实现
- GMM高斯混合模型进行背景建模(Matlab)
- 高斯混合模型
- 混合高斯模型
- 混合高斯模型
- 混合高斯模型
- CodeForces - 630N Forecast (解一元二次方程组)
- 拷贝构造,构造函数,析构函数的调用顺序
- C语言获得数组长度的函数
- SQL Server 设置自增长字段的开始值
- Android 判断数据库中是否存在某个表
- 混合高斯模型去除背景
- 开源实时日志分析ELK平台部署
- Pod 问题(diff: /../Podfile.lock:)
- Java集合:HashMap使用详解及源码分析
- 如何在Linux上为Python语言安装Redis客户端
- pod 遇到的坑
- 百搭的鸡丁,每一道都是美味的下饭菜
- 读书笔记_自定义view
- Android自定义View控件