OpenCV移动开始帧位置失败

时间:2014-05-03 03:51:11

标签: c++ opencv video-capture

我正在尝试使用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设置帧索引(根据post)。但它没有用。

我目前的解决方案是重建VideoCapture并从头到尾阅读。 任何人都可以解释为什么设置甚至不能回到视频的开头?我认为它与解压缩算法无关。

1 个答案:

答案 0 :(得分:0)

Try

cap.set(CV_CAP_PROP_POS_AVI_RATIO, 0);

cap.set(CV_CAP_PROP_POS_FRAMES, 0);