CvMat程序调试出错

         这几天在写一个程序,存储矩阵的时候,出现了错误,由于编程太菜,平常又没有系统学习,对于Mat矩阵的操作,还真的不是很了解,问题如下:

            for( int i=0;i<featureVecSize;i++)
          {
               
CV_MAT_ELEM( *posFeatureMat,float,0,i) = descriptors[i] ;      //CV_MAT_ELEM是给posFeatureMat赋值
               fprintf( fp,"%f\n",descriptors.at(i));     //fprintf是打印descriptors内容
          } 

提示出错在这一行: CV_MAT_ELEM( *posFeatureMat,float,0,i) = descriptors[i] ;

错误提示:Assertion failed:<unsigned><0> <<unsigned><*posFeatureMat>.rows && <unsigned><i><<unsigned><*posFeatureMat>.cols,file f:>

排错方案:检查featureVecSize的定义和赋值;posFeatureMat的定义;descriptors的定义

                     vector<float>descriptors;
                     int    featureVecSize = descriptors.size();
                    CvMat   *posFeatureMat = cvCreateMat( 1,3780,CV_32FC1 );

一经提示,我就能猜到是3780这里出错了,由于训练的图片大小改变了,提取的特征也改变了,而我还采用3780维,故矩阵出错。

若要实现写M行,N列的矩阵,则采用如下的形式:

                       for  (int j = 0;  j < XXX;  j++)
                      {
                            for  (int i = 0;  i < featureVecSize;  i++)
                           {
                                 printf("%f,", ...);
                           }
                               printf("\n");
                      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值