C++(和 openCV): Accumulating a number of Mat in vector<Mat>

标签 c++ opencv

我正在从网络摄像头抓取帧并将它们显示在窗口上。为了进行时间分析,我在抓取帧时将帧保持在 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/

相关文章:

c++ - 将多个对象传递给函数而不复制它们

python - 在Python中将矩阵列表转换为仅一个2D矩阵

c++ - 如何链接到现有的 boost python 模块

c++ - 从 <iostream> 收集来自 cin 的字符串输入并将其转换为 double 的正确方法是什么?

c++ - 用于处理自动资源释放的设计解决方案?

opencv - 如何遍历 JavaCV 中的 cvMat 矩阵?

c++ - 将 Lab 值转换为 opencv 中的 RGB 值

python - OpenCV + Python 使用 UDP 协议(protocol)通过网络传输 H264 视频

c++ - OpenCV光 vector 计算

c++ - 从嵌套的 STL 模板推断类型