我目前正在做一个项目,目前我需要从视频中提取连续的帧,然后找到并匹配它们的特征。问题是当我调用 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 代码中。任何帮助/建议将不胜感激。