考虑两个矩阵作为以下sample_method()
方法的输入参数,我想将两个矩阵m1
和m2
合并到一个新的矩阵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中?为什么我的代码不工作?
我认为你不可能做到这一点。Mat对象有一个指向其数据的指针,然后是帮助它解释该数据的参数。您要求从两个不相关的内存块中创建Mat,如果不以某种方式存储指向它们的指针,Mat没有成员变量可以将其放入。
m12(Rect(0,0,m1.cols,m1.rows)) = m1;
左边的部分为m12矩阵的指定部分创建一个标题。当你将m1赋值给这个头时-这个头开始指向与m1相同的数据。注意:此处不复制数据。这段代码什么也不做
不复制数据是不可能合并两个矩阵的