cvmGet和cvmSet中的bug


2008-03-11 22:40


// 源码如下。也就是说只支持CV_32FC1(float)和CV_64FC1(double)的类型
// 对于U类型的数据,可以使用cvSet2D进行读写
CV_INLINE double cvmGet( const CvMat* mat, int row, int col )
 {
     int type;    type = CV_MAT_TYPE(mat->type);
     assert( (unsigned)row < (unsigned)mat->rows &&
             (unsigned)col < (unsigned)mat->cols );    if( type == CV_32FC1 )
         return ((float*)(mat->data.ptr + (size_t)mat->step*row))[col];
     else
     {
         assert( type == CV_64FC1 );
         return ((double*)(mat->data.ptr + (size_t)mat->step*row))[col];
     }
 } CV_INLINE void cvmSet( CvMat* mat, int row, int col, double value )
 {
     int type;
     type = CV_MAT_TYPE(mat->type);
     assert( (unsigned)row < (unsigned)mat->rows &&
             (unsigned)col < (unsigned)mat->cols );    if( type == CV_32FC1 )
         ((float*)(mat->data.ptr + (size_t)mat->step*row))[col] = (float)value;
     else
     {
         assert( type == CV_64FC1 );
         ((double*)(mat->data.ptr + (size_t)mat->step*row))[col] = (double)value;
     }
 }