cvmGet和cvmSet中的bug CV_32FC1(float)和CV_64FC1(double)
转载
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;
}
}
|