2012-05-13 6 views
5

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

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:"); 
    } 
+0

2.3.1または2.4を使用しないのはなぜですか? – Alex

+0

私はopencv 2.3.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; 
} 

このようなものはうまくいくはずです。

関連する問題