您的位置:首页 > 理论基础 > 数据结构算法

Opencv笔记(1) 命名规则数据结构(CvMat,...)

2015-06-08 16:45 411 查看
网上搜索了很多,检查中发现的信息劣势,检查源代码同Cv为类的开始。包含详细的数据不(仅存储指针)CvMat
typedef struct CvMat
{
int type;
int step;

/* for internal use only */
int* refcount;
int hdr_refcount;

union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data;
<pre name="code" class="cpp">
#ifdef __cplusplus union { int rows; int height; }; union { int cols; int width; };#else int rows; int cols;#endif}CvMat;
<pre name="code" class="cpp">CV_INLINE CvMat cvMat( int rows, int cols, int type, void* data CV_DEFAULT(NULL)){CvMat m;assert( (unsigned)CV_MAT_DEPTH(type) <= CV_64F );type = CV_MAT_TYPE(type);m.type = CV_MAT_MAGIC_VAL | CV_MAT_CONT_FLAG | type;m.cols = cols;m.rows = rows;m.step = m.cols*CV_ELEM_SIZE(type);m.data.ptr = (uchar*)data;m.refcount = NULL;m.hdr_refcount = 0;return m;}
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*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col];    else    {        assert( type == CV_64FC1 );        return ((double*)(void*)(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*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = (float)value;    else    {        assert( type == CV_64FC1 );        ((double*)(void*)(mat->data.ptr + (size_t)mat->step*row))[col] = (double)value;    }}
typedef struct CvMatND{    int type;    int dims;    int* refcount;    int hdr_refcount;    union    {        uchar* ptr;        float* fl;        double* db;        int* i;        short* s;    } data;    struct    {        int size;        int step;    }    dim[CV_MAX_DIM];}CvMatND;
/* Basic element of the file storage - scalar or collection: */typedef struct CvFileNode{    int tag;    struct CvTypeInfo* info; /* type information            (only for user-defined object, for others it is 0) */    union    {        double f; /* scalar floating-point number */        int i;    /* scalar integer number */        CvString str; /* text string */        CvSeq* seq; /* sequence (ordered collection of file nodes) */        CvFileNodeHash* map; /* map (collection of named file nodes) */    } data;}CvFileNode;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: