資源描述:
《輪廓檢測(contour detection)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、輪廓檢測(Contourdetection)#包括“highgui?!?包括<<時(shí)間?!?包括<<數(shù)學(xué)。”#包括<<運(yùn)算符。”#包括#包括<字符串。”//跟蹤的參數(shù)(秒)/跟蹤的參數(shù)(單位為秒)const雙mhi_duration=0.5;//0.5s為運(yùn)動(dòng)跟蹤的最大持續(xù)時(shí)間const雙max_time_delta=0.5;const雙min_time_delta=0.05;常量=3;//constintcontour_max_aera=1000;//環(huán)圖像緩沖區(qū)圈出圖像緩沖IplImage*buf=0;//指
2、針的指針int=0;//臨時(shí)圖像臨時(shí)圖像IplImage*MHI=0;//MHI:運(yùn)動(dòng)歷史圖像cvfilter過濾器=cv_gaussian_5x5;cvconnectedcomp*cur_comp,min_comp;cvconnectedcompCOMP;cvmemstorage*存儲(chǔ);cvpointPT[4];//參數(shù)://IMG–輸入視頻幀//DST–檢測結(jié)果無效update_mhi(IplImage*img,IplImage*DST,intdiff_threshold){雙時(shí)間戳=clock()/100。;/秒時(shí)間戳獲得
3、當(dāng)前時(shí)間cvsize大小=cvsize(IMG->寬度,IMG->高度);//獲取當(dāng)前幀的大小,得到當(dāng)前幀的尺寸inti,IDX1、idx2;*SilHIplImage;他們cvcreateimage(cvsizeIplImage*=((size.width&-2)/2、(size.height&-2)/2),8,1);cvmemstorage*存儲(chǔ);cvseq*續(xù);先進(jìn)行數(shù)據(jù)的初始化/**/如果(!三菱
4、
5、MHI->寬度!=size.width
6、
7、MHI->高度!=size.height){如果(buf==0)/若尚沒有初始化
8、則分配內(nèi)存給他{buf=(IplImage**)malloc(N*sizeof(BUF[0]));memset(buf,0,N*sizeof(BUF[0]));}為(i=0;i<;;+(+)){cvreleaseimage(&buf[我]);但是[我]=cvcreateimage(大小、ipl_depth_8u,1);cvzero(BUF[我]);//明確的開始緩沖架}cvreleaseimage(與MHI);MHI=cvcreateimage(大小、ipl_depth_32f,1);cvzero(MHI);//清MHI在開始}
9、//結(jié)束如果(MHI)將當(dāng)前要處理的幀轉(zhuǎn)化為灰度放到緩沖的最后一幀中*//*cvcvtcolor(IMG,但[上],cv_bgr2gray);//將幀灰度設(shè)定幀的序號/**//*最后---->IDX1^
10、
11、
12、idx2<-----(上+1)%3*/IDX1=最后;idx2=(一+1)%N;//指數(shù)(最后第(n-1))框架最后,idx2;//做幀差但idx2SilH=[];//差值的指向idx2
13、idx2-idx1
14、-->idx2(<-SilH)cvabsdiff(BUF[IDX1],但[idx2],SilH);//幀之間的差//對
15、差圖像做二值化cvthreshold(SilH,治愈型,30,255,cv_thresh_binary);//閾值,二值化cvupdatemotionhistory(SilH,MHI、時(shí)間戳、mhi_duration);//更新MHIcvconvert(MHI,DST);//將MHI轉(zhuǎn)化為DST,DST=MHI//中值濾波,消除小的噪聲cvSmooth(DST,DST,cv_median,3,0,0,0);cvpyrdown(DST,Pyr,cv_gaussian_5x5);//向下采樣,去掉噪聲,圖像是原圖像的四分之一cvDi
16、late(芘,芘,0,1);//做膨脹操作,消除目標(biāo)的不連續(xù)空洞cvpyrup(Pyr、DST、cv_gaussian_5x5);//向上采樣,恢復(fù)圖像,圖像是原圖像的四倍////下面的程序段用來找到輪廓///創(chuàng)建動(dòng)態(tài)結(jié)構(gòu)和序列。(0)cvcreatememstorage故事=;續(xù)=cvcreateseq(cv_seq_eltype_point,sizeof(cvseq),sizeof(cvpoint),存儲(chǔ));//找到所有輪廓cvfindcontours(DST,存儲(chǔ)和控制,sizeof(cvcontour),cv_retr_
17、list,cv_chain_approx_simple,cvpoint(0,0));//直接使用輪廓中的矩形來畫輪廓為(;控制;控制=控制->h_next){cvrectR=((cvcontour*)續(xù))->矩形;如果(r.height*r.width>cont