C++ 合并两个cv::Mat而不复制数据
考虑将两个矩阵作为以下C++ 合并两个cv::Mat而不复制数据,c++,opencv,C++,Opencv,考虑将两个矩阵作为以下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;
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;
}
bool-sample\u方法(常数材料和m1、常数材料和m2)
{
如果(m1.cols!=m2.cols)
{
cout我认为你永远也无法做到这一点。Mat对象有一个指向其数据的指针,然后是帮助它解释该数据的参数。你要求用两个不相关的内存块制作一个Mat,如果不存储指向这两个块的指针,就无法做到这一点,而且Mat没有指向p的成员变量在..中使用它。我认为你永远都无法实现这一点。Mat对象有一个指向其数据的指针,然后是帮助它解释该数据的参数。你要求用两个不相关的内存块制作一个Mat,如果不存储指向这两个块的指针,就无法实现,而且Mat没有成员变量能把它放进去
m12(Rect(0,0,m1.cols,m1.rows)) = m1;
左侧部分为m12矩阵的指定部分创建一个标头。当您将m1分配给此标头时,此标头开始指向与m1相同的数据。注意:此处不复制数据。
此代码不起任何作用
不复制数据就不可能合并两个矩阵
左侧部分为m12矩阵的指定部分创建一个标头。当您将m1分配给此标头时,此标头开始指向与m1相同的数据。注意:此处不复制数据。
此代码不起任何作用
不复制数据就不可能合并两个矩阵