C ++(和openCV):在向量<mat> </mat>中累积一些Mat

时间:2013-11-21 11:48:20

标签: c++ opencv

我正在从网络摄像头抓取框架在窗口上显示它们。为了进行时间分析,我在抓取它时将帧保持在矢量上。 为了测试它,当我的矢量大小达到100时,我试图可视化到目前为止存储的所有帧。

奇怪的是,实际上矢量内部有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);   
    }

2 个答案:

答案 0 :(得分:3)

你从VideoCapture得到的Mat都指向相同的驱动程序内存。

Mat a = b;做一个浅拷贝(相同的像素指针)

所以你需要:

 seq.push_back(frame.clone());

这里(即深拷贝)

答案 1 :(得分:0)

帧仍将指向相同的数据字段。因此,无论何时获取新图像,所有先前捕获的图像也将更新。

解决方案是在通过调用frame.release()

将帧放入向量后释放帧