OpenCV 中CvMat* 與CvMat

一、OpenCV 中CvMat* 與CvMat 定義一定要留意,不然在cvInvert(CvMat*,CvMat*),cvReshape(),cvMatMul()等函數的調用中,編譯通過,但運行時出錯.

例如:CvMat aa;

         CvMat* bb;  

 則:  cvInvert(&aa,bb),

若寫成: cvInvert(&aa, &bb),運行時出錯。

二、cvMatMul(CvMat*,CvMat*,CvMat*)中的三個parameters 都應該是CV_64F類型,如果有CV_32F則計算報錯。

三、怎樣把 vector<CvPoint3D32f> _Points(pNum);關聯的Mat 的三個點數據用一個函數取出來賦給一個新的3*1的Mat?

 

        例如:vector<CvPoint3D64f> _Points(455124);

                CvMat points=cvMat(1,455124,CV_64F,&_Points[0]);

                CvMat temPoints;

                cvReshape(&points,&temPoints,1,3);

 

然而得到的新的 temPoints卻變成了3*151708, 而不是想要的3*455124。

 

解決辦法 1、在第二行code中改成:CvMat points=cvMat(3,455124,CV_64F,&_Points[0]);

           或 2、                     改成:CvMat points=cvMat(1,455124,CV_64FC3,&_Points[0]);

 

因爲用外部數據 建立矩陣時, 是從外部數據開始位置往下走,根據內存,取夠所定義的 元素個數(如1*455124) 爲止,多餘的數據不會管它,所以要想取得 vector : _Points(455124);的所有元素 就得 有(3*455124)個64F 內存元素(方法1)。

或者 建立cvMat時 就建立3 channel (方法2)。

 

發佈了35 篇原創文章 · 獲贊 12 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章