资源简介

行人检测C++代码

资源截图

代码片段和文件信息

#include “cv.h“
#include 
#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
int filter = CV_GAUSSIAN_5x5;
CvConnectedComp *cur_comp min_comp;
CvConnectedComp comp;
CvMemStorage *storage; CvPoint pt[4];
// 参数:
// img – 输入视频帧
// dst – 检测结果
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 < N; 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
 // 对差图像做二值化
 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

评论

共有 条评论