⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 345.cpp

📁 自己采用opencv编写的程序
💻 CPP
字号:
#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <cvaux.h>//必须引此头文件

void main(  )
{     
    IplImage* pFrame = NULL;      
    IplImage* pFrImg = NULL;    
    IplImage* pBkImg = NULL;      
    CvCapture* pCapture = NULL;      
    
    int nFrmNum = 0;    
    
    cvNamedWindow("video", 1);    
    cvNamedWindow("background",1);    
    cvNamedWindow("foreground",1);
         
    cvMoveWindow("video", 30, 0);    
    cvMoveWindow("background", 360, 0);    
    cvMoveWindow("foreground", 690, 0);   
       
    //打开视频文件    
    pCapture = cvCaptureFromFile("video.long.xvid.avi") ;
    
	//获取视频帧信息参数
	//frameH:帧的高度;frameW:帧的宽度;fps:每秒视频帧数;numFrames:视频帧总数
    int frameH = (int)cvGetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_HEIGHT) ;
    int frameW = (int)cvGetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_WIDTH) ;
    int fps = (int)cvGetCaptureProperty(pCapture, CV_CAP_PROP_FPS) ;
    int numFrames = (int)cvGetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_COUNT) ;

	//初始化高斯混合模型参数   
    CvGaussBGModel* bg_model = NULL;

	
    while(pFrame = cvQueryFrame( pCapture ))      
    {           
		nFrmNum++;                 
        if(nFrmNum == 1)         
		{   
		    CvScalar s1; 
            s1=cvGet2D(pFrame, 1, 1);
            double var[100];
			var[nFrmNum] = s1.val[0] ;
			//数值在 gray=s1.val[0]
			//或者Blue=s1.val[0], Red=s1.val[2], Green=s1.val[1]

 			pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height),  IPL_DEPTH_8U,3);  
			//存放背景图像(RGB)
			pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height),  IPL_DEPTH_8U,1); 
			//存放中间图像(灰度)

            //高斯背景建模,pFrame可以是多通道图像也可以是单通道图像          
            //cvCreateGaussianBGModel函数返回值为CvBGStatModel*,          
            //需要强制转换成CvGaussBGModel*        
			//这边可以加初始化参数值加入方法是:
			//CvGaussBGStateMode params ;
			//params.win_size = 500  ;
			bg_model = (CvGaussBGModel*)cvCreateGaussianBGModel(pFrame, 0);      
        }           
        else      
		{                     
			//更新高斯模型        
            cvUpdateBGStatModel(pFrame, (CvBGStatModel *)bg_model );          
            
			//pFrImg为前景图像,只能为单通道          
            //pBkImg为背景图像,可以为单通道或与pFrame通道数相同         
            cvCopy(bg_model->foreground,pFrImg,0);            
            cvCopy(bg_model->background,pBkImg,0);          
            
			//把图像正过来         
			pBkImg->origin=1;         
			pFrImg->origin=1;          
            
			cvShowImage("video", pFrame);             
			cvShowImage("background", pBkImg);             
			cvShowImage("foreground", pFrImg);                
			if( cvWaitKey(2) >= 0 )                  
				break;           
		}         
	}   
    //释放高斯模型参数占用内存      
    cvReleaseBGStatModel((CvBGStatModel**)&bg_model);   
    cvDestroyWindow("video");    
    cvDestroyWindow("background");    
    cvDestroyWindow("foreground");      
    cvReleaseImage(&pFrImg);    
	cvReleaseImage(&pBkImg);      
    cvReleaseCapture(&pCapture);      
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -