CvMat程序调试出错

来源:互联网 发布:java语言和静态页面 编辑:程序博客网 时间:2024/04/29 01:16

         这几天在写一个程序,存储矩阵的时候,出现了错误,由于编程太菜,平常又没有系统学习,对于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");
                      }

原创粉丝点击