Opencv 노트 (1) 명명 규칙 데이터 구조 (CvMat,...)

3301 단어 opencv
인터넷 에서 많이 검색 되 었 는데, 검사 에서 발 견 된 정보 약점, 소스 코드 를 검사 하 였 다.
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;

좋은 웹페이지 즐겨찾기