I’ve been using the OpenCV (ver. 1.0.0) lately and I noticed that under Linux, using the ‘cvCaptureFromAVI’ does not detect the correct number of frames from an AVI video file. So this code returns 0 as the number of frames:

[sourcecode language=’cpp’]
CvCapture *capture = cvCaptureFromAVI( path2Video );
cvQueryFrame( capture );
int nFrames = (int) cvGetCaptureProperty( capture , CV_CAP_PROP_FRAME_COUNT );
[/sourcecode]

So I wrote a small piece of code which reads the number of frames directly from the AVI file. Please use it and let me know if you had any problem.

[sourcecode language=’cpp’]
int nFrames;
char tempSize[4];

// Trying to open the video file
ifstream videoFile( path2Video , ios::in | ios::binary );
// Checking the availablity of the file
if ( !videoFile ) {
cout « “Couldn’t open the input file “ « path2Video « endl;
exit( 1 );
}

// get the number of frames
videoFile.seekg( 0x30 , ios::beg );
videoFile.read( tempSize , 4 );
nFrames = (unsigned char ) tempSize[0] + 0x100*(unsigned char ) tempSize[1] + 0x10000*(unsigned char ) tempSize[2] + 0x1000000*(unsigned char ) tempSize[3];

videoFile.close( );
[/sourcecode]