背景:現在有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;
至此,問題完美解決!!! NND,讓我研究了幾天。
參考:
(1)http://stackoverflow.com/questions/8005627/opencv-2-3-copyto-function-not-working-as-it-was-in-2-2
(2)http://hi.baidu.com/%BE%B2%C7%C4%C7%C4%B5%D8%B0%AE%D7%C5%C4%E3/blog/item/509b7d198c12742734fa417e.html#0 我按照此方法,報錯:
錯誤:no matching function for call to 'cv::Mat::copyTo(cv::Mat)'(3)http://www.opencv.org.cn/forum/viewtopic.php?p=2987 基於CVMat類型的實現,太麻煩了,我沒有實驗,大家有弄的出來結果給我說下哈!