我正在尝试使用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并从头到尾阅读。 任何人都可以解释为什么设置甚至不能回到视频的开头?我认为它与解压缩算法无关。
答案 0 :(得分:0)