-
大小: 412KB文件類(lèi)型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-05-29
- 語(yǔ)言: 其他
- 標(biāo)簽: opencv??運(yùn)動(dòng)檢測(cè)??
資源簡(jiǎn)介
opencv運(yùn)動(dòng)物體檢測(cè)的代碼,通過(guò)讀取視頻的每幾幀,通過(guò)對(duì)比這幾幀實(shí)現(xiàn)進(jìn)行運(yùn)動(dòng)物體檢測(cè)

代碼片段和文件信息
#include?“cv.h“
#include?“highgui.h“
#include?
#include?
#include?
#include?
#include?
//?various?tracking?parameters?(in?seconds)
const?double?MHI_DURATION?=?0.5;
const?double?MAX_TIME_DELTA?=?0.5;
const?double?MIN_TIME_DELTA?=?0.05;
const?int?N?=?3;
//
const?int?CONTOUR_MAX_AERA?=?16;
//?ring?image?buffer
IplImage?**buf?=?0;
int?last?=?0;
//?temporary?images
IplImage?*mhi?=?0;?//?MHI:?motion?history?image
CvFilter?filter?=?CV_GAUSSIAN_5x5;
CvConnectedComp?*cur_comp?min_comp;
CvConnectedComp?comp;
CvMemStorage?*storage;
CvPoint?pt[4];
//??參數(shù):
//??img?–?輸入視頻幀
//??dst?–?檢測(cè)結(jié)果
void??update_mhi(?IplImage*?img?IplImage*?dst?int?diff_threshold?)
{
????double?timestamp?=?clock()/100.;?//?get?current?time?in?seconds
????CvSize?size?=?cvSize(img->widthimg->height);?//?get?current?frame?size
????int?i?j?idx1?idx2;
????IplImage*?silh;
????uchar?val;
????float?temp;
????IplImage*?pyr?=?cvCreateImage(?cvSize((size.width?&?-2)/2?(size.height?&?-2)/2)?8?1?);
????CvMemStorage?*stor;
????CvSeq?*cont?*result?*squares;
????CvSeqReader?reader;
????if(?!mhi?||?mhi->width?!=?size.width?||?mhi->height?!=?size.height?)?
????{
????????if(?buf?==?0?)?
????????{
????????????buf?=?(IplImage**)malloc(N*sizeof(buf[0]));
????????????memset(?buf?0?N*sizeof(buf[0]));
????????}
????????
????????for(?i?=?0;?i?????????{
????????????cvReleaseImage(?&buf[i]?);
????????????buf[i]?=?cvCreateImage(?size?IPL_DEPTH_8U?1?);
????????????cvZero(?buf[i]?);
????????}
????????cvReleaseImage(?&mhi?);
????????mhi?=?cvCreateImage(?size?IPL_DEPTH_32F?1?);
????????cvZero(?mhi?);?//?clear?MHI?at?the?beginning
????}?//?end?of?if(mhi)
????cvCvtColor(?img?buf[last]?CV_BGR2GRAY?);?//?convert?frame?to?grayscale
????idx1?=?last;
????idx2?=?(last?+?1)?%?N;?//?index?of?(last?-?(N-1))th?frame?
????last?=?idx2;
????//?做幀差
????silh?=?buf[idx2];
????cvAbsDiff(?buf[idx1]?buf[idx2]?silh?);?//?get?difference?between?frames
????
????//?對(duì)差圖像做二值化
????cvThreshold(?silh?silh?30?255?CV_THRESH_BINARY?);?//?and?threshold?it
????
????cvUpdateMotionHistory(?silh?mhi?timestamp?MHI_DURATION?);?//?update?MHI
????cvCvtScale(?mhi?dst?255./MHI_DURATION?
??????(MHI_DURATION?-?timestamp)*255./MHI_DURATION?);????
????cvCvtScale(?mhi?dst?255./MHI_DURATION?0?);????
????
????//?中值濾波,消除小的噪聲
????cvSmooth(?dst?dst?CV_MEDIAN?3?0?0?0?);
????
????//?向下采樣,去掉噪聲
????cvPyrDown(?dst?pyr?7?);
????cvDilate(?pyr?pyr?0?1?);??//?做膨脹操作,消除目標(biāo)的不連續(xù)空洞
????cvPyrUp(?pyr?dst?7?);
????//
????//?下面的程序段用來(lái)找到輪廓
????//
????//?Create?dynamic?structure?and?sequence.
????stor?=?cvCreateMemStorage(0);
????cont?=?cvCreateSeq(CV_SEQ_ELTYPE_POINT?sizeof(CvSeq)?sizeof(CvPoint)??stor);
????
????//?找到所有輪廓
????cvFindContours(?dst?stor?&cont?sizeof(CvContour)?
????????????????????CV_RETR_LIST?CV_CHAIN_APPROX_SIMPLE?cvPoint(00));
/*
????for(;cont;cont?=?cont->h_next)
????{???
????????//?Number?point?must?be?more?than?or?equal?to?6?(for?cvFitEllipse_32f).????
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件?????????140??2007-02-24?14:01??Makefile
?????文件????????4953??2010-07-08?10:24??motiondetect.c
?????文件??????432700??2006-09-05?00:10??video.avi
評(píng)論
共有 條評(píng)論