合并两个cv::Mat而不复制数据
Merge two cv::Mat without copying the data
考虑两个矩阵作为以下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相同的数据。注意:此处不复制数据。这段代码什么也不做
不复制数据是不可能合并两个矩阵的
相关文章:
- 如何将 cv::Mat & Img 复制到未签名的 char* img?opencv
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- 将CV :: MAT转换为STD :: vector而无需复制
- OpenCV Mat对象复制速度更快
- 在不复制数据的情况下更改 opencv mat 中的列顺序
- 将数据从 cv::Mat 复制到 CvMat,反之亦然
- 将 cv::Mat 向量复制到浮点数向量的最佳方法是什么?
- 为什么将 cv::Mat 的列复制到向量中会失败
- 在不复制数据的情况下将OpenCV Mat发送到MATLAB工作区的方法
- 在矢量到矢量中复制数据<float> <Mat> (Opencv/C++)
- 从C数组(column-major)转换为armadillo矩阵(arma::mat),无需复制
- 拆分OpenCV Mat而不复制数据
- 如何从图像矢量复制单个图像到临时cv::Mat
- 复制图像数据到向量cv::mat
- 如何将 Mat(CV_32FC1) 复制到矢量<float>*
- OpenCV/ c++:将一个Mat中的行/列复制到另一个Mat中
- 将 cv::Mat 复制到另一个会创建"assertion failed 0 <= _colRange.start && .."
- OpenCV Mat::operator=-是否支持写时复制
- 如何在不同的线程中将图像数据从BitmapSource(WPF)复制到C++/CLI中的cv::Mat(OpenCV)
- 将一个简历::Mat推到另一个简历中,就会复制它