Question

I am trying to read an AVI file using openCV. After getting the capture, the problem comes when I give a condition to the while loop which governs the extent to which queryFrame will be done. There are total 1251 frames in the video.

When I use while (counter <= number_of_frames), the video runs fine and, when I use while (cvQueryFrame(capture)), the video runs fine till 200-250th frame, then suddenly it starts running faster and finishes by 625th frame. I printed the FPS, it remains same all the time.

Why is this happening ?? Please help!

Was it helpful?

Solution

try the following...

C style reading..

#include <opencv2/video/video.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main()
{
  CvCapture *video;
  video = cvCreateFileCapture("ADDRESS TO THE FILE");
  IplImage *frame;

  while(true)
  {
    frame = cvQueryFrame(video);
    if(frame->imageData==NULL)
      {
        std::cout<<"END OF VIDEO"<<std::endl;
        break;
      }
    cvShowImage("VIDEO",frame);
    cvWiatKey(25);//SINCE MOST OF THE VIDEOS RUN AT 25 FPS
   }
  return 0;
}

C++ STYLE....

int main()
{
  VideoCapture video("ADDRESS OF VIDEO");
  Mat frame;

  while(true)
  {
    video >> frame;
    if(frame.data==NULL)
      {
         std::cout<<"END OF VIDEO FILE"<<std::endl;
         break;
      }
    imshow("VIDEO",frame);
    waitKey(25);
   }
return 0;
}

try this...and check if it gives an uniform rate of play...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top