資源簡介
使用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編程
評論
共有 條評論