作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从网络摄像头抓取帧并将它们显示在窗口上。为了进行时间分析,我在抓取帧时将帧保持在 vector 上。为了对其进行测试,当我的 vector 大小达到 100 时,我尝试可视化到目前为止存储的所有帧。
奇怪的是,vector里面确实有100帧,但都是一样的,对应的是最后一帧。
代码:
Mat frame;
_cap.start(0); //VideoCapture object
vector<Mat> seq;
while(1)
{
_cap.getFrame(frame);
seq.push_back(frame);
imshow("a", seq[0]);
if (seq.size() == 100)
{
for (int n = 0; n < seq.size(); n++)
{
cout << "I'm in" << endl;
imshow("b", seq[n]);
waitKey(0);
}
}
waitKey(30);
}
最佳答案
您从 VideoCapture 获得的 Mat 都指向相同的驱动程序内存。
垫a=b;做一个浅拷贝(相同的像素指针)
所以你需要:
seq.push_back(frame.clone());
此处(即深拷贝)
关于C++(和 openCV): Accumulating a number of Mat in vector<Mat>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20120179/
我是一名优秀的程序员,十分优秀!