我试图创建一个包含平板电脑行图像的大型矩阵,以便在 Emgucv 中使用 PCA 函数。 我成功地将平板电脑图像(比如 MxN) reshape 为矩阵(1 行,MxN 列)。现在我想将它复制到大矩阵的第 i 行(k 行,MxN 列)。这是我的代码:
Matrix<byte> largeMatrix= new Matrix<byte> (k,M*N);
Matrix<byte> temp = new Matrix<byte>(M,N); //tablet image
Matrix<byte> temp1 = new Matrix<byte>(1,M*N); //tablet image after reshaping into 1 row
CvInvoke.cvConvert(src.Copy(),temp);
CvInvoke.cvReshape(temp, temp1, 0, 1);
//Written in C# using Emgucv
如何在 Emgucv(或 Opencv)中将 temp1 精确复制到矩阵 largeMatrix 的第 i 行。
最佳答案
这很简单。抱歉,我只有 C++ 代码给你。
cv::Mat dest; // size NxM (rowsxcols)
cv::Mat src; // size N
cv::Mat row(dest.row(i));
src.copyTo(row);
现在这里发生了什么?
Mat row
是一个矩阵头,它正好包裹了 dest
的行 i
。它不会创建副本,而只是提供相同数据的不同 View 。然后,copyTo()
方法实际复制两个矩阵之间的数据。
这里重要的是不要写row = src
。这只会改变 row
的标题,而不是它指向的数据。
关于opencv - 在 Emgucv 或 Opencv 中将多个一维矩阵复制到一个大的一维矩阵中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26628118/