在opencv中读取视频文件的连续图像

时间:2013-05-02 23:49:07

标签: c++ opencv video-processing

我目前正在开展一个项目,目前我需要从视频中提取连续帧,然后找到并匹配它们上的功能。问题是,当我调用VideoCapture :: read(Mat& image)时,它会覆盖我要与同一图像进行比较的两个图像。我想这可能是因为使用了相同的缓冲区,因此两个值都指向相同的空间。我只是不确定如何解决这个问题。

这是问题代码:(不要担心可怜的异常处理)

    Mat m1, m2;
VideoCapture cap(argv[1]);
if(!cap.isOpened()){
    throw std::exception("Could not open the file");
}
int num = 0;

while(num < 20){
    try{
    cap.read(m1);
    cap.read(m2);

    num++;  
    match(m1,m2,num);

    }catch(std::exception){
        std::cout << "Oh no!";
    }
}

匹配(m1,m2,num)执行特征检测业务并输出图像“Image_%d.jpg”,num。该图像是并排显示的图像。此图像是连续两次相同的图像。 match()确实有效,因为我用静态图像测试了它,所以我相信问题在于cap.read代码。 任何帮助/建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

这就像确保每张图片都是捕获图像的深层副本一样简单。

m1 >> cap
m1 = m1.clone();

做了这个伎俩,虽然不如我希望的那么优雅。