2012-05-13 29 views
5

Tôi đang làm việc trên một dự án với openCV 2.2. Tôi cần phải xử lý trên mỗi khung của một tập tin AVI nhưng khi tôi chạy mã của tôi nó chỉ lấy khung đầu tiên của tập tin. CV_CAP_PROP_POS_FRAMES dường như không hoạt động. Bất kỳ ý tưởng tại sao không?Chụp khung OpenCV từ AVI

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

Tại sao bạn không sử dụng 2.3.1 hoặc 2.4? – Alex

+0

Tôi đã đọc nó với opencv 2.3.1 và vấn đề vẫn tồn tại. –

Trả lời

8

Tại sao bạn không thử cách này bằng OpenCV 2.3? Tôi nghĩ rằng nó trực tiếp và hiệu quả hơn và rõ ràng hơn đối với đôi mắt của bạn:

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

Điều gì đó tương tự sẽ hoạt động.