資源簡介
opencv運動物體檢測,檢測視頻中的運動物體,并分離出前景背景

代碼片段和文件信息
#include?
#include?
#include?
#include?
int?main(?int?argc?char**?argv?)
{
??//聲明IplImage指針
??IplImage*?pframe?=?NULL;?
??IplImage*?pFrImg?=?NULL;
??IplImage*?pBkImg?=?NULL;
??CvMat*?pframeMat?=?NULL;
??CvMat*?pFrMat?=?NULL;
??CvMat*?pBkMat?=?NULL;
??
??CvCapture*?pCapture?=?NULL;
??
??int?nFrmNum?=?0;
??//創(chuàng)建窗口
??cvNamedWindow(“video“?1);
??//cvNamedWindow(“background“1);
??cvNamedWindow(“foreground“1);
??//使窗口有序排列
??cvMoveWindow(“video“?10?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])))
{
fprintf(stderr?“Can?not?open?video?file?%s\n“?argv[1]);
return?-2;
????}
??
??//逐幀讀取視頻
??while(pframe?=?cvQueryframe(?pCapture?))
????{
??????nFrmNum++;
??????
??????//如果是第一幀,需要申請內(nèi)存,并初始化
??????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);
??//轉(zhuǎn)化成單通道圖像再處理
??cvCvtColor(pframe?pBkImg?CV_BGR2GRAY);
??cvCvtColor(pframe?pFrImg?CV_BGR2GRAY);
??cvConvert(pFrImg?pframeMat);
??cvConvert(pFrImg?pFrMat);
??cvConvert(pFrImg?pBkMat);
}
??????else
??{
??cvCvtColor(pframe?pFrImg?CV_BGR2GRAY);
??cvConvert(pFrImg?pframeMat);
??//高斯濾波先,以平滑圖像
??//cvSmooth(pframeMat?pframeMat?CV_GAUSSIAN?3?0?0);
??
??//當前幀跟背景圖相減
??cvAbsDiff(pframeMat?pBkMat?pFrMat);
??//二值化前景圖
??cvThreshold(pFrMat?pFrImg?60?255.0?CV_THRESH_BINARY);
??//進行形態(tài)學濾波,去掉噪音??
??//cvErode(pFrImg?pFrImg?0?1);
??//cvDilate(pFrImg?pFrImg?0?1);
??//更新背景
??cvRunningAvg(pframeMat?pBkMat?0.003?0);
??//將背景轉(zhuǎn)化為圖像格式,用以顯示
??cvConvert(pBkMat?pBkImg);
??//顯示圖像
??cvShowImage(“video“?pframe);
??//cvShowImage(“background“?pBkImg);
??cvShowImage(“foreground“?pFrImg);
??//如果有按鍵事件,則跳出循環(huán)
??//此等待也為cvShowImage函數(shù)提供時間完成顯示
??//等待時間可以根據(jù)CPU速度調(diào)整
??if(?cvWaitKey(2)?>=?0?)
????break;
}
????}
??//銷毀窗口
??cvDestroyWindow(“video“);
??cvDestroyWindow(“background“);
??cvDestroyWindow(“foreground“);
??//釋放圖像和矩陣
??cvReleaseImage(&pFrImg);
??cvReleaseImage(&pBkImg);
??cvReleaseMat(&pframeMat);
??cvReleaseMat(&pFrMat);
??cvReleaseMat(&pBkMat);
??cvReleaseCapture(&pCapture);
??return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????188488??2010-01-20?21:52??MotionDetection\Debug\MotionDetection.exe
?????文件?????210380??2010-01-20?21:52??MotionDetection\Debug\MotionDetection.ilk
?????文件??????17356??2010-01-20?21:52??MotionDetection\Debug\MotionDetection.obj
?????文件????4115936??2010-01-20?21:49??MotionDetection\Debug\MotionDetection.pch
?????文件?????459776??2010-01-20?21:52??MotionDetection\Debug\MotionDetection.pdb
?????文件?????156672??2010-01-23?23:26??MotionDetection\Debug\vc60.idb
?????文件??????94208??2010-01-20?21:52??MotionDetection\Debug\vc60.pdb
?????文件???????3064??2010-01-20?21:52??MotionDetection\MotionDetection.cpp
?????文件???????4278??2010-01-20?21:54??MotionDetection\MotionDetection.dsp
?????文件????????555??2010-01-20?21:45??MotionDetection\MotionDetection.dsw
?????文件??????41984??2010-01-23?23:27??MotionDetection\MotionDetection.ncb
?????文件??????48640??2010-01-23?23:27??MotionDetection\MotionDetection.opt
?????文件????????264??2010-01-23?23:26??MotionDetection\MotionDetection.plg
?????目錄??????????0??2010-01-20?21:52??MotionDetection\Debug
?????目錄??????????0??2010-01-23?23:27??MotionDetection
-----------?---------??----------?-----??----
??????????????5341601????????????????????15
評論
共有 條評論