• 大小: 4.91MB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2023-11-11
  • 语言: 其他
  • 标签: 轨迹  

资源简介

轨迹提取,用于视频事件检测等,非常好用!

资源截图

代码片段和文件信息

#include “DenseTrack.h“
#include “Descriptors.h“
#include “Initialize.h“

IplImageWrapper image prev_image grey prev_grey;
IplImagePyramid grey_pyramid prev_grey_pyramid eig_pyramid;

CvCapture* capture = 0;
float* fscales = 0; // float scale values
int show_track = 0; // set show_track = 1 if you want to visualize the trajectories

int main( int argc char** argv )
{
int frameNum = 0;
TrackerInfo tracker;
DescInfo hogInfo;
DescInfo hofInfo;
DescInfo mbhInfo;

char* video = argv[1];
arg_parse(argc argv);

// std::cerr << “start_frame: “ << start_frame << “ end_frame: “ << end_frame << “ track_length: “ << track_length << std::endl;
// std::cerr << “min_distance: “ << min_distance << “ patch_size: “ << patch_size << “ nxy_cell: “ << nxy_cell << “ nt_cell: “ << nt_cell << std::endl;

InitTrackerInfo(&tracker track_length init_gap);
InitDescInfo(&hogInfo 8 0 1 patch_size nxy_cell nt_cell);
InitDescInfo(&hofInfo 9 1 1 patch_size nxy_cell nt_cell);
InitDescInfo(&mbhInfo 8 0 1 patch_size nxy_cell nt_cell);

capture = cvCreateFileCapture(video);

if( !capture ) { 
printf( “Could not initialize capturing..\n“ );
return -1;
}

if( show_track == 1 )
cvNamedWindow( “DenseTrack“ 0 );

std::vector > xyScaleTracks;
int init_counter = 0; // indicate when to detect new feature points
while( true ) {
IplImage* frame = 0;
int i j c;

// get a new frame
frame = cvQueryframe( capture );
if( !frame ) {
//printf(“break“);
break;
}
if( frameNum >= start_frame && frameNum <= end_frame ) {
if( !image ) {
// initailize all the buffers
image = IplImageWrapper( cvGetSize(frame) 8 3 );
image->origin = frame->origin;
prev_image= IplImageWrapper( cvGetSize(frame) 8 3 );
prev_image->origin = frame->origin;
grey = IplImageWrapper( cvGetSize(frame) 8 1 );
grey_pyramid = IplImagePyramid( cvGetSize(frame) 8 1 scale_stride );
prev_grey = IplImageWrapper( cvGetSize(frame) 8 1 );
prev_grey_pyramid = IplImagePyramid( cvGetSize(frame) 8 1 scale_stride );
eig_pyramid = IplImagePyramid( cvGetSize(frame) 32 1 scale_stride );

cvCopy( frame image 0 );
cvCvtColor( image grey CV_BGR2GRAY );
grey_pyramid.rebuild( grey );

// how many scale we can have
scale_num = std::min(scale_num grey_pyramid.numOfLevels());
fscales = (float*)cvAlloc(scale_num*sizeof(float));
xyScaleTracks.resize(scale_num);

for( int ixyScale = 0; ixyScale < scale_num; ++ixyScale ) {
std::list& tracks = xyScaleTracks[ixyScale];
fscales[ixyScale] = pow(scale_stride ixyScale);

// find good features at each scale separately
IplImage *grey_temp = 0 *eig_temp = 0;
std::size_t temp_level = (std::size_t)ixyScale;
grey_temp = cvCloneImage(grey_pyramid.getImage(temp_level));
eig_temp = cvCloneImage(eig_pyramid.getImage(temp_level));
std::vector points(0);
cvDenseSample(grey_temp eig_temp point

评论

共有 条评论