在Open Cv中重复视频

时间:2013-12-01 01:49:47

标签: c++ opencv video

我正在尝试在视频到达第50帧之后开始播放视频(e.i无限期地重复前50帧)。我读到了之前的question其中一位响应者说,这样做的唯一可行方法是保存帧然后重新显示它们。但是,我可以设置一个计数器到VideoCapture对象的开头,并继续使用>>抓取帧。运营商?这是我到目前为止所尝试的:

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;

}

1 个答案:

答案 0 :(得分:0)

CV_CAP_PROP_POS_AVI_RATIO不是帧'计数器'。 get()方法的文档说它是“视频文件的相对位置:0 - 电影的开头,1 - 电影的结尾。”。而在set()方法的文档中根本就没有这样的参数。

所以,你最好再关闭并再次打开捕获,然后回到开头。

对于感觉如此简单和自然的手术来说,这似乎有点过分。但实际上,视频解码并不是那么简单。帧依赖于其他帧 - 因此仅知道您想要帧号N是不够的,一般情况下您需要一些先前的帧以及后面的帧(例如B-frames)。并不是说这不可能 - 但它相当复杂或者至少是不安。