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