//============================================================================= #include "movieIO.h" #include "rgbImage.h" #include "featureCorrelator.h" #include "subWindow.h" #include "percentBar.h" int main( int argc, char *argv[] ) { movieIO movie; if ( argc<4 ) { printf( "Usage: %s [outfile]\n", argv[0] ); exit(0); } FILE *output; if ( argc>4 ) { output = fopen( argv[4], "w" ); if ( output==0 ) { printf("Couldn't open output: %s\n", argv[4] ); exit(0); } } else { output = stdout; } int minPerFrame = atoi(argv[2]); if ( minPerFrame<=0 ) { printf("Error in specification of minimum number of features \n" ); printf("to track per frame: %i\n", minPerFrame ); exit(0); } int minTrackLen = atoi(argv[3]); if ( minTrackLen<=0 ) { printf("Error in specification of minimum length of feature \n" ); printf("tracking: %i\n", minTrackLen ); exit(0); } fprintf( stderr, "Preparing \"%s\"...\n", argv[1] ); if ( !movie.open( argv[1] ) ) { printf( "Error in preparing %s\n", argv[1] ); exit(0); } vector features; if ( output==stdout ) { fprintf( stderr, "Initializing Correlator...\n" ); featureCorrelator corl( 0, movie, true ); fprintf( stderr, "Tracking Features...\n" ); features = corl.buildTrackedFeatureList( 0, minPerFrame, minTrackLen, (movie.getWidth()>movie.getHeight() ? movie.getWidth():movie.getHeight())*0.1f); } else { printf("\n"); featureCorrelator corl( "Initializing Correlator: ", movie, true ); printf("\n"); features = corl.buildTrackedFeatureList( "Tracking Features: ", minPerFrame, minTrackLen, (movie.getWidth()>movie.getHeight() ? movie.getWidth():movie.getHeight())*0.1f); printf("\n"); } if ( output==stdout ) { fprintf( stderr, "\nThe following output is meant to be captured to\n" ); fprintf( stderr, "a text file for later analysis\n\n" ); } fprintf( output, "// Tracking data generated from \"%s\"\n", argv[1] ); fprintf( output, "// minPerFrame = %i\n", minPerFrame ); fprintf( output, "// minTrackLen = %i\n", minTrackLen ); fprintf( output, "#ifndef FEATURE_LIST_NAME\n"); fprintf( output, " #include \"subWindow.h\"\n" ); fprintf( output, " vector test;\n" ); fprintf( output, " #define FEATURE_LIST_NAME test\n"); fprintf( output, "#endif\n"); fprintf( output, "#define FEAT_LIST_ADD(featnum, framenum, centX, centY, sizeX, sizeY ) \\\n" ); fprintf( output, " if (featnum>=FEATURE_LIST_NAME.size()) FEATURE_LIST_NAME.resize(featnum+1); \\\n" ); fprintf( output, " FEATURE_LIST_NAME[featnum].addSubWindow(framenum, subWindow(centX, centY, sizeX, sizeY));\n" ); fprintf( output, "#ifdef WIDTH_VAR\n" ); fprintf( output, " WIDTH_VAR = %i;\n", movie.getWidth() ); fprintf( output, "#endif\n"); fprintf( output, "#ifdef HEIGHT_VAR\n" ); fprintf( output, " HEIGHT_VAR = %i;\n", movie.getHeight() ); fprintf( output, "#endif\n"); fprintf( output, "#ifdef LENGTH_VAR\n" ); fprintf( output, " LENGTH_VAR = %i;\n", movie.getLength() ); fprintf( output, "#endif\n"); int featNum=0; for ( vector::iterator iter=features.begin(); iter!=features.end(); iter++, featNum++ ) { for ( int frameNum=iter->getInterval().getStart(); frameNum<=iter->getInterval().getEnd(); frameNum++ ) { const subWindow *curr = &(iter->getSubWindow(frameNum)); fprintf( output, "FEAT_LIST_ADD( %i, %i, %i, %i, %i, %i )\n", featNum, frameNum, curr->centerX(), curr->centerY(), curr->sizeX(), curr->sizeY() ); } } fprintf( output, "\n"); if ( output!=stdout ) fclose(output); else { movie.play(); } movie.close(); }