OpenCV和Mat向量:使用copyTo和clone()进行赋值

时间:2014-06-11 12:50:13

标签: c++ opencv vector

我自己试图寻找解决方案,但我花了很多时间而且仍然没用。

问题在于:我正在捕捉帧(来自标准相机)并将它们放入缓冲区 - 矢量(Mat)。当我拿一个框架时,我将它放在第一个位置,所有其余的都被推到右边,如下所示:

假设我们有一个Mats {1 2 3}的向量,然后我捕获第0帧,我必须有{0 1 2}。

我为此目的定义了向量,但在推送元素时,我面临着奇怪的行为。这是我的代码(objectPatches是Mat向量,frameHSV是简单Mat):

        for (vector<Mat>::size_type j = objectPatches.size() - 1; j >= 1; j--) {
        objectPatches[j - 1].copyTo(objectPatches[j]); // DOES NOT

        objectPatches[j] = objectPatches[j - 1].clone(); //WORKS
    }
    frameHSV.copyTo(objectPatches[0]);

当我尝试使用copyTo()更新缓冲区时,所有缓冲区值都填充相同的值(是相同的图像)并且我没有得到所谓的“wave”图片(更改波形),但是,当我尝试使用clone()做同样的事情,它确实工作正常,我得到了结果。这项任务的原因是什么?有什么我想念的吗?

非常感谢。

编辑1:

在循环之前,objectPatches已经保存了相同大小的图像,所以我的意思是该向量已完全初始化并且确实分配了一些初始化数据。在循环步骤中,它只需要将这些图像重新排列到右侧。

编辑2:

vector objectPatches在初始化时填充了push_back()函数。代码剪辑:

Mat capframe;
capFromCamera.read(capFrame);
objectPatches.push_back(capFrame);

因此,根据Micka的回答,这意味着他们共享相同的数据阵列。

0 个答案:

没有答案