if (argc == 2)
if ( !(pCapture = cvCaptureFromFile(argv[1])))
{
fprintf(stderr, "Can not open video file %s\n", argv[1]);
return -2;
}
//开始计时
time_t start,end;
time(&start); //time() 返回从1970年1月1号00:00:00开始以来到现在的秒数(有10为数字)。
printf("%d\n",start);
//逐帧读取视频
while (pFrame = cvQueryFrame( pCapture ))
{
nFrmNum++;
//如果是第一帧,需要申请内存,并初始化
if (nFrmNum == 1)
{
pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
pBkImgTran = cvCreateImage(cvSize(pFrame->width,pFrame->height), IPL_DEPTH_8U,1);
pFrImgTran = cvCreateImage(cvSize(pFrame->width,pFrame->height), IPL_DEPTH_8U,1);
pBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
pZeroMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
pFrMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
pFrMatB = cvCreateMat(pFrame->height, pFrame->width, CV_8UC1);
pZeroMatB = cvCreateMat(pFrame->height, pFrame->width, CV_8UC1);
pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
cvZero(pZeroMat);
//转化成单通道图像再处理
cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);
//转换为矩阵
cvConvert(pFrImg, pBkMat);
}
else /* 不是第一帧的就这样处理 */
{
//pFrImg为当前帧的灰度图
cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);
//pFrameMat为当前灰度矩阵
cvConvert(pFrImg, pFrameMat);
//pFrMat为前景图矩阵,当前帧减去背景图
cvAbsDiff(pFrameMat, pBkMat, pFrMat);
//pFrMatB为二值化(0,1)的前景图
cvThreshold(pFrMat,pFrMatB, 60, 1, CV_THRESH_BINARY);
//将图像矩阵转化为图像格式,用以显示
cvConvert(pBkMat, pBkImgTran);
cvConvert(pFrMat, pFrImgTran);
//显示图像