我正在尝试创建一个包含平板电脑图像的大型矩阵,以便在Emgucv中使用PCA功能。 我成功地将平板电脑图像(比方说MxN)重新塑造成矩阵(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
如何将temp1复制到Emgucv(或Opencv)中矩阵largeMatrix的确切行i中。
答案 0 :(得分:1)
这很简单。对不起,我只有你的C ++代码。
cv::Mat dest; // size NxM (rowsxcols)
cv::Mat src; // size N
cv::Mat row(dest.row(i));
src.copyTo(row);
现在发生了什么?
Mat row
是一个矩阵标头,它完全包裹i
的行dest
。它不会创建副本,而只是提供相同数据的不同视图。然后,copyTo()
方法实际上在两个矩阵之间复制数据。
这里重要的是不要写row = src
。这只会改变row
的标题,而不是它指向的数据。