Я пытаюсь использовать 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 и прочитать его от начала до конца. Кто-нибудь может объяснить, почему сет даже не может вернуться к началу видео? Я думаю, что это не имеет ничего общего с алгоритмом декомпрессии.