2012-05-13 29 views
5

से ओपनसीवी फ्रेम कैप्चर मैं ओपनसीवी 2.2 के साथ एक परियोजना पर काम कर रहा हूं। मुझे एवीआई फ़ाइल के प्रत्येक फ्रेम पर प्रोसेसिंग करने की ज़रूरत है, लेकिन जब मैं अपना कोड चलाता हूं तो यह केवल फाइल के पहले फ्रेम को पकड़ लेता है। 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:"); 
    } 
+0

आप 2.3.1 या 2.4 का उपयोग क्यों नहीं करते? – Alex

+0

मैंने इसे opencv 2.3.1 के साथ ट्रेस किया और समस्या अभी भी मौजूद है। –

उत्तर

8

ओपनसीवी 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; 
} 

ऐसा कुछ काम करना चाहिए।