2

openCVを使用してAVIファイルを読み取ろうとしています。キャプチャを取得した後、queryFrameが実行される範囲を管理するwhileループに条件を指定すると、問題が発生します。ビデオには合計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 に答える