OpenCV:阅读视频序列

时间:2014-05-12 18:05:12

标签: opencv

有没有办法在OpenCV中随机读取视频帧....就像使用索引访问数组一样?否则,如果我想在CPU或GPU中加载完整的视频,我该怎么办?

1 个答案:

答案 0 :(得分:5)

您可以在视频捕获中使用set(int propId, double value)方法(也可以查看documentation),其中propId可以是以下之一:

  • CV_CAP_PROP_POS_MSEC:视频文件的当前位置(以毫秒为单位)。
  • CV_CAP_PROP_POS_FRAMES:下一个要解码/捕获的帧的从0开始的索引。
  • CV_CAP_PROP_POS_AVI_RATIO:视频文件的相对位置:0 - 电影的开头,1 - 电影结束。

在50秒内播放视频的小例子:

int main( int argc, char **argv )
{
    namedWindow("Frame", CV_WINDOW_NORMAL);
    Mat frame;

    VideoCapture capture(argv[1]);
    if (!capture.isOpened())
    {
        //error in opening the video input
        cerr << "Unable to open video file: " << argv[1] << endl;
        exit(EXIT_FAILURE);
    }

    capture.set(CV_CAP_PROP_POS_MSEC, 50000);
    for (;;)
    {
        //read the current frame
        if (!capture.read(frame))
        {
            cerr << "Unable to read next frame." << endl;
            cerr << "Exiting program!" << endl;
            exit(EXIT_FAILURE);
        }
        imshow("Frame", frame);
        waitKey(20);
    }
}