Capture OpenCV frame from AVI

I am working on a project with openCV 2.2. I need to process every frame of the AVI file, but when I run my code, it captures only the first frame of the file. CV_CAP_PROP_POS_FRAMES does not seem to work. Any ideas why not?

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:"); } 
+5
c ++ opencv frames avi
May 13 '12 at 5:19
source share
1 answer

Why don't you try using OpenCV 2.3? I think it is more direct and efficient, and clearer to your eyes:

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

Something like this should work.

+8
May 22 '12 at 7:11
source share



All Articles