资源简介
使用VC++6.0 读AVI视频数据, 原代码程序, 共初学者使用.挺不错的,可以参考
代码片段和文件信息
#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]\n“);
// return -1;
//}
////打开摄像头
//if (argc ==1)
// if( !(pCapture = cvCaptureFromCAM(-1)))
// {
// fprintf(stderr “Can not open camera.\n“);
// return -2;
// }
//打开视频文件
//if(argc == 2)
//if( !(pCapture = cvCaptureFromFile(argv[1])))
if( !(pCapture = cvCaptureFromFile(videoname)))
{
fprintf(stderr “Can not open video file %s\n“ 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 Debug\shipin.exe
文件 202652 2010-08-30 20:29 Debug\shipin.ilk
文件 17516 2010-08-30 20:29 Debug\shipin.obj
文件 4058576 2010-08-30 20:29 Debug\shipin.pch
文件 435200 2010-08-30 20:29 Debug\shipin.pdb
文件 156672 2010-08-30 20:29 Debug\vc60.idb
文件 94208 2010-08-30 20:29 Debug\vc60.pdb
目录 0 2010-08-30 20:29 Debug
----------- --------- ---------- ----- ----
5241356 14
- 上一篇:C++ 解析H264文件
- 下一篇:伪彩色增强算法 适用于c、matlab编程
相关资源
- VC++使用教程烟台南山学院
- VC++网络聊天室源代码和程序说明
- 把脉 VC++ 完整光盘源码
- 使用VC++制作的简易电子时钟
- VC++开发的软件动态链接库mfc42d.dll m
- VC++MP3播放器课程设计实验报告
- 基于VC++6.0的绘图软件画直线曲线矩形
- VC++打印程序Print
- TeeChar8控件及其使用方法针对于VC++
- 小世界网络编程VC++
- VC++开发界面源码
- MySock 应用Socket编程实现一个简单的网
- 切水果的鼠标跟随特效
- VC6.0 MFC时钟运动源码.zip
- CWnd类VC++类所有函数的中文翻译
- VC++实现小波变换图像融合
- VC++车牌识别系统源码带可执行程序
- VC++实现ShePp_Logan模型设计
- VC++调用大漠插件按键精灵的方法及演
- VC++多文档程序可新建文本编辑器和画
- 直线段的裁剪 vc++ MFC
- vC++编程精选100
- VC++头文件库
- 网络五子棋全功能版
- 成绩查询系统VC++源代码
- VC++实现视频采集
- VC++ 图像文字提取
- VC++6.0安装包中文版
- VC++窗口和控件自适应屏幕尺寸改.ra
- devc++5.11284673
评论
共有 条评论