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)。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值