/* --Sparse Optical Flow Demo Program-- * Written by David Stavens (david.stavens@ai.stanford.edu) */ #include #include #include #include staticconst double pi = 3.14159265358979323846; inline static double square(int a) { return a * a; } /* This is just an inline that allocates images. I did this to reduce clutter in the * actual computer vision algorithmic code. Basically it allocates the requested image * unless that image is already non-NULL. It always leaves a non-NULL image as-is even * if that image's size, depth, and/or channels are different than the request. */ inline static void allocateOnDemand( IplImage **img, CvSize size, int depth, int channels ) { if ( *img != NULL ) return; *img = cvCreateImage( size, depth, channels ); if ( *img == NULL ) { fprintf(stderr, "Error: Couldn't allocate image. Out of memory?\n"); exit(-1); } } int main(void) { /* Create an object that decodes the input video stream. */ CvCapture *input_video = cvCaptureFromFile( "C:\\Documents and Settings\\David Stavens\\Desktop\\223B-Demo\\optical_flow_input.avi" ); if (input_video == NULL) { /* Either the video didn't exist OR it uses a codec OpenCV * doesn't support. */ fprintf(stderr, "Error: Can't open video.\n"); return -1; } /* Read the video's frame size out of the AVI. */ CvSizeframe_size; frame_size.height = (int) cvGetCaptureProperty( input_video, CV_CAP_PROP_FRAME_HEIGHT ); frame_size.width = (int) cvGetCaptureProperty( input_video, CV_CAP_PROP_FRAME_WIDTH ); /* Determine the number of frames in the AVI. */ longnumber_of_frames; /* Go to the end of the AVI (ie: the fraction is "1") */ cvSetCaptureProperty(input_video, CV_CAP_PROP_POS_AVI_RATIO, 1. ); /* Now that we're at the end, rea...