C++ 在打开的Cv中重复视频
我正在尝试在视频刚到达第50帧(即,我无限期地重复前50帧)后的开始处开始视频。我读到过一篇关于以前的文章,其中一位回复者说,唯一可行的方法是保存帧,然后重新显示它们。但是,我可以在VideoCapture对象的开头设置一个计数器,然后继续使用>>操作符抓取帧吗?这就是我迄今为止所尝试的:C++ 在打开的Cv中重复视频,c++,opencv,video,C++,Opencv,Video,我正在尝试在视频刚到达第50帧(即,我无限期地重复前50帧)后的开始处开始视频。我读到过一篇关于以前的文章,其中一位回复者说,唯一可行的方法是保存帧,然后重新显示它们。但是,我可以在VideoCapture对象的开头设置一个计数器,然后继续使用>>操作符抓取帧吗?这就是我迄今为止所尝试的: VideoCapture cap;//I select the video by passing it as an argument though the terminal. while(1){ i
VideoCapture cap;//I select the video by passing it as an argument though the terminal.
while(1){
if (FrameIndex == 50){
//cap.set(CV_CAP_PROP_POS_FRAMES, 0);
cap.set(CV_CAP_PROP_POS_AVI_RATIO , 0);
cap >> frame;
}
else{
cap >> frame;
}
//####################################
//# Rest of the code inside the loop #
//####################################
FrameIndex++;
FrameIndex = FrameIndex%50;
}
CV_CAP_PROP_POS_AVI_RATIO不是帧“计数器”。get()方法的doc表示它是“视频文件的相对位置:0-胶片的开始,1-胶片的结束”。在set()方法的doc中根本没有这样的参数 因此,您最好只需关闭并再次打开捕获即可回到开始
对于一个感觉如此简单和自然的手术来说,这似乎有点太过分了。但实际上,视频解码并不是那么简单。这些帧依赖于其他帧-因此仅知道您想要帧编号N是不够的,通常情况下,您需要前面的帧以及下面的帧(例如)。这并不是说这无法实现,而是相当复杂或至少不容易实现。将CV_CAP_PROP_POS_FRAMES设置为0,是否不正常?是的,我得到了以下错误:“OpenCV错误:断言失败(0