2

我正在尝试使用 openCV 读取 AVI 文件。获得捕获后,当我为 while 循环提供一个条件时,问题就出现了,该条件控制 queryFrame 将完成的程度。视频共有 1251 帧。

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

为什么会这样??请帮忙!

4

1 回答 1

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++ 风格....

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

试试这个...并检查它是否提供统一的播放速度...

于 2012-12-23T05:52:43.637 回答