VC++读视频文件
使用VC++6.0 读AVI视频数据, 原代码程序, 共初学者使用.挺不错的,可以参考
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 41984 2010-08-30 20:36 shipin.ncb
文件 1178 2010-08-30 20:29 shipin.plg
文件 3518 2010-08-30 20:29 shipin.cpp
文件 3479 2009-09-07 11:23 shipin.dsp
文件 537 2009-09-18 19:49 shipin.dsw
文件 53760 2010-08-30 20:36 shipin.opt
文件 172076 2010-08-30 20:29 Debugshipin.exe
文件 202652 2010-08-30 20:29 Debugshipin.ilk
文件 17516 2010-08-30 20:29 Debugshipin.obj
文件 4058576 2010-08-30 20:29 Debugshipin.pch
文件 435200 2010-08-30 20:29 Debugshipin.pdb
文件 156672 2010-08-30 20:29 Debugvc60.idb
文件 94208 2010-08-30 20:29 Debugvc60.pdb
目录 0 2010-08-30 20:29 Debug
----------- --------- ---------- ----- ----
5241356 14
#include “cxcore.h“
#include “cvaux.h“
#include “cvcam.h“
#include “highgui.h“
#include “cv.h“
#include “stdio.h“
int main( int argc char** argv )
{
//声明IplImage指针
IplImage* pframe = NULL;
IplImage* pFrImg = NULL;
IplImage* pBkImg = NULL;
char* videoname=“3.avi“;
CvMat* pframeMat = NULL;
CvMat* pFrMat = NULL;
CvMat* pBkMat = NULL;
//cvcamPlayAVI(videonameNULL320240mycallback);
CvCapture* pCapture = NULL;
char s[20];
int nFrmNum = 0;
//创建窗口
cvNamedWindow(“video“ 1);
cvNamedWindow(“background“1);
cvNamedWindow(“foreground“1);
//使窗口有序排列
cvMoveWindow(“video“ 30 0);
cvMoveWindow(“background“ 360 0);
cvMoveWindow(“foreground“ 690 0);
//if( argc > 2 )
//{
// fprintf(stderr “Usage: bkgrd [video_file_name]
“);
// return -1;
//}
////打开摄像头
//if (argc ==1)
// if( !(pCapture = cvCaptureFromCAM(-1)))
// {
// fprintf(stderr “Can not open camera.
“);
// return -2;
// }
//打开视频文件
//if(argc == 2)
//if( !(pCapture = cvCaptureFromFile(argv[1])))
if( !(pCapture = cvCaptureFromFile(videoname)))
{
fprintf(stderr “Can not open video file %s
“ argv[1]);
return -2;
}
//逐帧读取视频
while(pframe = cvQueryframe( pCapture ))
{
nFrmNum++;
sprintf(s“frame%d.bmp“nFrmNum);
//如果是第一帧,需要申请内存,并初始化
if(nFrmNum == 1)
{
pBkImg = cvCreateImage(cvSize(pframe->width pframe->height) IPL_DEPTH_8U1);
pFrImg = cvCreateImage(cvSize(pframe->width pframe->height) IPL_DEPTH_8U1);
pBkMat = cvCreateMat(pframe->height pframe->width CV_32FC1);
pFrMat = cvCreateMat(pframe->height pframe->width CV_32FC1);
pframeMat = cvCreateMat(pframe->height pframe->width CV_32FC1);
//转化成单通道图像再处理
cvCvtColor(pframe pBkImg CV_BGR2GRAY);
cvCvtColor(pframe pFrImg CV_BGR2GRAY);
cvFlip(pBkImg NULL 0);
cvFlip(pFrImg NULL 0);
cvSaveImage(spBkImg);
cvConvert(pFrImg pframeMat);
cvConvert(pFrImg pFrMat);
cvConvert(pFrImg pBkMat);
}
else
{
cvCvtColor(pframe pFrImg CV_BGR2GRAY);
cvFlip(pFrImg NULL 0);
cvSaveImage(spFrImg);
cvConvert(pFrImg pframeMat);
//高斯滤波先,以平滑图像
//cvSmooth(pframeMat pframeMat CV_GAUSSIAN 3 0 0);
//当前帧跟背景图相减
cvAbsDiff(pframeMat pBkMat pFrMat);
//二值化前景图
cvThreshold(pFrMat pFrImg 60 255.0 CV_THRESH_BINARY);
//进行形态学滤波,去掉噪音
//cvErode(pFrImg pFrImg 0 1);
//cvDilate(pFrImg pFrImg 0 1);
//更新背景
cvRunningAvg(pframeMat pBkMat 0.003 0);
//将背景转化为图像格式,用以显示
cvConvert(pBkMat pBkImg);
//显示图像
// pFrImg->origin=1;
// pBkImg->origin=1;
cvShowImage(“video“ pframe);
cvShowImage(“background“ pBkImg);
cvShowImage(“foreground“ pFrImg);
//
cvCvtColor(pframe pBkImg CV_BGR2GRAY);
cvFlip(pBkImg NULL 0); //矩阵旋转
cvConvert(pBkImg pBkMat);
Sleep(100);
//如果有按键事件,则跳出循环
//此等待也为cvShowImage函数提供时间完成显示
//等待时间可以根据CPU速度调整
if( cvWaitKey
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 41984 2010-08-30 20:36 shipin.ncb
文件 1178 2010-08-30 20:29 shipin.plg
文件 3518 2010-08-30 20:29 shipin.cpp
文件 3479 2009-09-07 11:23 shipin.dsp
文件 537 2009-09-18 19:49 shipin.dsw
文件 53760 2010-08-30 20:36 shipin.opt
文件 172076 2010-08-30 20:29 Debugshipin.exe
文件 202652 2010-08-30 20:29 Debugshipin.ilk
文件 17516 2010-08-30 20:29 Debugshipin.obj
文件 4058576 2010-08-30 20:29 Debugshipin.pch
文件 435200 2010-08-30 20:29 Debugshipin.pdb
文件 156672 2010-08-30 20:29 Debugvc60.idb
文件 94208 2010-08-30 20:29 Debugvc60.pdb
目录 0 2010-08-30 20:29 Debug
----------- --------- ---------- ----- ----
5241356 14
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)