5

私はopenCV 2.2でプロジェクトに取り組んでいます。AVI ファイルの各フレームで処理を行う必要がありますが、コードを実行すると、ファイルの最初のフレームしか取得されません。CV_CAP_PROP_POS_FRAMES が機能していないようです。アイデアはありますか?

    CvCapture* capture = cvCaptureFromAVI("test1.avi");

    IplImage *img = 0;

    if (!cvGrabFrame(capture)) {
            printf("Error: Couldn't open the image file.\n");
            return 1;
    }

    int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
    int posFrame = 1;
    for(int i =0; i <= numFrames; i++){
        cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, i);
              posFrame = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES);

              img = cvGrabFrame(capture);
              cvNamedWindow("Image:", CV_WINDOW_AUTOSIZE);
              cvShowImage("Image:", img);
              printf("%i\n",posFrame);

              cvWaitKey(0);

              cvDestroyWindow("Image:");
    }
4

1 に答える 1

8

OpenCV 2.3を使用してこの方法を試してみませんか?私はそれがより直接的で効率的であり、あなたの目にはより明確だと思います:

VideoCapture _videoSource;

if(!_videoSource.open("test1.avi")) 
{
   exit(1);         // Exit if fail
}
_videoSource.set(CV_CAP_PROP_CONVERT_RGB, 1);

Mat frame;
namedWindow("Image");
int posFrame;

while(1) 
{
  _videoSource >> frame;
  posFrame=_videoSource.get(CV_CAP_PROP_POS_FRAMES);
  imshow("output", frame);
  return 0;
}

このようなものが機能するはずです。

于 2012-05-22T07:11:42.107 に答える