首页 文章

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

提问于
浏览
0

我目前正在开展一个项目,目前我需要从视频中提取连续帧,然后找到并匹配它们上的功能 . 问题是,当我调用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!";
    }
}

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

1 回答

  • 1

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

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

    虽然没有我想象的那么优雅,但是做到了这一点 .

相关问题