转载: 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 }