OpenCV переместиться в начальную позицию кадра не удается

Я пытаюсь использовать OpenCV VideoCapture для чтения некоторых кадров для обучения. После тренировки хотелось бы вернуться к началу видео и заняться обработкой. Проблема в том, что набор OpenCV VideoCapture (CV_CAP_PROP_POS_FRAMES, 0) не может вернуться к началу видео.

VideoCapture cap("video1.mp4");
if( !cap.isOpened()){
    cout << "Cannot open the video file" << endl;
    return -1;
}

// read some frames here

int count = cap.get(CV_CAP_PROP_FRAME_COUNT); //get total frame count
cap.set(CV_CAP_PROP_POS_FRAMES, 0); //Set index to 0 (start frame)

int index = 1;
while(1)
{
   Mat frame;
   bool success = cap.read(frame);
   if (!success){
     cout << "Cannot read  frame " << endl;
     break;
   }
   cout << "the current frame: " << index << endl;
   index++;
}

В программе конечное значение индекса не будет таким же, как количество кадров. Скажем, пример запуска будет:

index = 3774 and count = 3786
index = 3764 and count = 3776

Я также пытаюсь установить индекс кадра, используя CV_CAP_PROP_POS_MSEC (согласно опубликовать). Но это не сработало.

Мое текущее решение состоит в том, чтобы восстановить VideoCapture и прочитать его от начала до конца. Кто-нибудь может объяснить, почему сет даже не может вернуться к началу видео? Я думаю, что это не имеет ничего общего с алгоритмом декомпрессии.


person user2262504    schedule 03.05.2014    source источник


Ответы (1)


Попробовать

cap.set(CV_CAP_PROP_POS_AVI_RATIO, 0);

or

cap.set(CV_CAP_PROP_POS_FRAMES, 0);
person herohuyongtao    schedule 03.05.2014