資源簡介
本程序通過對采集到的視頻序列進行分析,采用背景差法和自適應背景更新的方法對,進入視頻序列或攝像頭中的人體進行自動檢測
代碼片段和文件信息
//利用背景建模檢測運動物體358
#include?
#include?
#include?
int?main(?int?argc?char**?argv?)//需要輸入命令行的參數
{
??//聲明IplImage指針
??IplImage*?pframe?=?NULL;?//從攝像頭或者文件中抓取并返回一幀,獲取真正的圖像的指針
??IplImage*?pFrImg?=?NULL;//申請了8位無符號整形的內存空間將第一幀圖像轉換成灰度圖像存的了這里,不是第一幀的也存到這里?也轉成灰度,在處理,作為前景
??????????????????????????//存放了二值化之后的前景,原來圖像絕對差后存放在pFrMat
??IplImage*?pBkImg?=?NULL;//申請了8位無符號整形的內存空間將第一幀圖像轉換成灰度圖像存的了這里,作為背景,再把背景圖像轉換成矩陣格式
??????????????????????????//存儲更新后的背景
??CvMat*?pframeMat?=?NULL;//存放其他幀的數組,申請32位,單精度,1通道的矩陣空間,pFrImg存的由pframe轉換過來的灰度圖像,再由pFrImg轉換過來的矩陣存的這里pframeMat
??CvMat*?pFrMat?=?NULL;//存放其他幀和背景做絕對差的數組,
??CvMat*?pBkMat?=?NULL;//存放背景的數組
??
??CvCapture*?pCapture?=?NULL;//存放視頻的變量,存放獲取到的視頻
??
??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?)//按ctrl+F5后就出現了window的黑面
????{
??????fprintf(stderr?“Usage:?bkgrd?\n“);
??????return?-1;
????}
??//打開視頻文件
??//在命令行上輸入Debug>bkgrd.exe?SampleVideo.avi????則argv[0]=bkgrd.exe;argv[1]=SampleVideo.avi
??if(?!(pCapture?=?cvCaptureFromFile(argv[1])))//cvCaptureFromFile?視頻獲取結構,獲得視頻的,如果獲取的不是SampleVideo.avi這個視頻則輸出不能打開視頻文件
????????????????????????????????????????????//存放著視頻
????{
??????fprintf(stderr?“Can?not?open?video?file?%s\n“?argv[1]);
??????return?-2;
????}
???
??//逐幀讀取視頻
?? while(pframe?=?cvQueryframe(?pCapture?))//cvQueryframe從攝像頭或者文件中抓取并返回一幀?IplImage*?cvQueryframe(?CvCapture*?capture?);
????{
?????? nFrmNum++;//執行完這條語句后,(i=3j=i++后,j=3,i=4),nFrmNum++=0,nFrmNum==1
??????
?????? //如果是第一幀,需要申請內存,并初始化
?????? if(nFrmNum?==?1)//如果是第一幀
{
pBkImg?=?cvCreateImage(cvSize(pframe->width?pframe->height)//IplImage*?cvCreateImage(?CvSize?size?int?depth?int?channels?);
?? IPL_DEPTH_8U1);?????????????????????????????????????????????????????//創建一幅灰度圖像,通道1,分配出了內存
?? pFrImg?=?cvCreateImage(cvSize(pframe->width?pframe->height)??
IPL_DEPTH_8U1);?????????????????????????????????????????????????????//創建一幅灰度圖像,分配出了內存,無符號8位整型?
????????????pBkMat?=?cvCreateMat(pframe->height?pframe->width?CV_32FC1);
?? pFrMat?=?cvCreateMat(pframe->height?pframe->width?CV_32FC1);//32位,單精度,1通道
?? pframeMat?=?cvCreateMat(pframe->height?pframe->width?CV_32FC1);//CvMat*?cvCreateMat(?int?rows?int?cols?int?type?);
?? //轉化成單通道圖像再處理
//關鍵步驟---------------------------
- 上一篇:FindPass.exe
- 下一篇:中國商用密碼SMS4
評論
共有 條評論