合并两个cv :: Mat而不复制数据

时间:2013-01-06 18:05:11

标签: c++ opencv

将两个矩阵视为以下sample_method()方法的输入参数,我想在新矩阵m1中合并两个矩阵m2m12。我读了this reference然后也读了this reference,但这两个解决方案将数据从源矩阵复制到目标矩阵。

bool sample_method(const Mat& m1, const Mat& m2)
{
    if(m1.cols != m2.cols)
    {
        cout << "Error: m1.cols != m2.cols" << endl;
        return false;
    }

    Mat m12(m1.rows+m2.rows,m1.cols,DataType<float>::type);
    // merging m1 and m2
    m12(Rect(0,0,m1.cols,m1.rows)) = m1;
    m12(Rect(0,m1.rows,m2.cols,m2.rows)) = m2;

    return true;
}

如何在不复制数据的情况下在单个Mat中连接两个Mat? 为什么我的代码不起作用?

2 个答案:

答案 0 :(得分:4)

我认为你永远不会去那里工作。 Mat对象有一个指向其数据的指针,然后是帮助它解释该数据的参数。你要求用两个不相关的内存块来制作一个Mat,如果不以某种方式存储指向这两个内存的指针就没有办法做到这一点,并且Mat没有一个成员变量来放入它。

答案 1 :(得分:1)

m12(Rect(0,0,m1.cols,m1.rows)) = m1;

左侧部分为m12矩阵的指定部分创建标题。将m1分配给此标头时 - 此标头开始指向与m1相同的数据。注意:不要在那里复制数据。 这段代码什么都不做

如果不复制数据,就无法合并两个矩阵。