为什么使用OpenCV读取AVI视频的速度会增加?

时间:2012-12-21 20:48:08

标签: image-processing opencv computer-vision avi

我正在尝试使用openCV读取AVI文件。在获取捕获之后,当我给while循环一个条件来控制queryFrame的执行程度时,就会出现问题。 视频中共有1251帧。

当我使用while (counter <= number_of_frames)时,视频运行正常, 当我使用while (cvQueryFrame(capture))时,视频运行正常,直到200-250帧,然后突然开始运行得更快,并在第625帧结束。我打印了FPS,它始终保持不变。

为什么会这样? 请帮忙!

1 个答案:

答案 0 :(得分:3)

尝试以下方法......

C风格阅读..

#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;
}

试试这个...并检查它是否给出了统一的游戏率......