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


    网上搜索了很多,检查中发现的信息劣势,检查源代码

    同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;
    




  • 相关阅读:
    snabbdom源码(二)
    linux汇总 文本操作三篇之grep
    snabbdom源码(一)
    linux汇总 文本操作三篇之sed
    你的c语言中文版项目使用 char 还是 wchar_t?
    实习经验谈
    fastdfs 安装和使用
    redison 自动续期的 分布式锁
    vue3 中的axios的使用,使用Vue.prototype 报错问题
    vue3的 keepalive 使用,以及activated钩子 和 vuerouter中的 scrollBehavior的使用
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4561362.html
Copyright © 2020-2023  润新知