0

考虑两个矩阵作为以下sample_method()方法的输入参数,我想合并这两个矩阵m1m2在一个新的矩阵m12中。我阅读了这个参考,然后也阅读了这个参考,但这两种解决方案将数据从源矩阵复制到目标矩阵。

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 中?为什么我的代码不起作用?

4

2 回答 2

4

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

于 2013-01-07T00:54:08.723 回答
1
m12(Rect(0,0,m1.cols,m1.rows)) = m1;

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

不复制数据就不可能合并两个矩阵。

于 2013-10-26T10:44:41.200 回答