将多个1D矩阵复制到Emgucv或Opencv中的一个大型1D矩阵中

时间:2014-10-29 10:35:31

标签: opencv matrix emgucv

我正在尝试创建一个包含平板电脑图像的大型矩阵,以便在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中。

1 个答案:

答案 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的标题,而不是它指向的数据。