Mat 矩阵合并

  转载: http://blog.youkuaiyun.com/yanzi1225627/article/details/7687310


背景:现在有CvMat类型的矩阵n个,每个矩阵都是1*m的行向量,也即每个CvMat代表一个样本的特征向量。

现在需要申请一个n*m, 即n行m列的矩阵, 每一行表示一个样本的特征向量,特征向量的维数为m。此问题也就是纠结我多天的矩阵合并问题。


           解决方法:

 CvMat *palm = (CvMat*)cvLoad(path);  //得到一个行向量

 Mat tempMat = Mat(palm, true);            //将CvMat转为Mat   
  Mat dsttemp = M.row(n);             //M为目的矩阵 n*m
  tempMat.copyTo(dsttemp);       //

         如何查看M的值呢,网上说cout<<M就可以了,可是我电脑上没成功,不知道怎么回事。

我自己的方法:

        const float *pData = M.ptr<float>(1);   //这是查看第二行的值,如果查看第一行则改为 <float>(0)
        for(int i=0; i<M.cols; i++)
         cout<<pData[i]<<endl;


转自:http://www.cnblogs.com/cgjdemo/p/4173866.html

有的时候我们需要将几个矩阵按行或者按列进行合并成一个大矩阵,这在Matlab里面非常的简单,但在OpenCV里面并没有这样的方法,现在我在OpenCV的源码里面发现合并矩阵的方法,分享给大家。

    A = [1 2 3 4];

    B = [2 3 4 5];

    C = [A;B];

上面的是Matlab语言的矩阵合并,非常的简洁简单。接下来我给出OpenCV的两个矩阵的合并代码.

复制代码
 1 Mat mergeRows(Mat A, Mat B)
 2 {
 3     CV_ASSERT(A.cols == B.cols&&A.type() == B.type());
 4     int totalRows = A.rows + B.rows;
 5 
 6     Mat mergedDescriptors(totalRows, A.cols, A.type());
 7     Mat submat = mergedDescriptors.rowRange(0, A.rows);
 8     A.copyTo(submat);
 9     submat = mergedDescriptors.rowRange(A.rows, totalRows);
10     B.copyTo(submat);
11     return mergedDescriptors;
12 }


上面的代码是两个矩阵的按行合并,按列合并原理相同,就不再写出来了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值