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

本文深入解析了OpenCV中CvMat结构体的定义及其相关函数cvMat(), cvmGet(), cvmSet()的工作原理,同时介绍了CvMatND和CvFileNode等核心数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上查了很多,发现查资料不如查源码

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




### 解决方案 为了确保MathType公式编号最后一行对齐,在Word中的操作可以遵循特定的格式调整方式。当遇到公式编号对齐的情况时,可以通过以下几种方法来解决问题。 #### 方法一:自定义样式并应用 创建一个新的段落样式专门用于公式及其编号。通过这种方式能够更好地控制公式的显示效果以及编号的位置[^3]。 ```plaintext 1. 打开“设计”选项卡下的“样式”,点击右侧的小箭头进入更多样式界面; 2. 选择“创建新样式”,命名为`FormulaWithNumber`; 3. 设置此样式的对齐方式为居中,并指定后续段落样式为正文或其它适当样式; 4. 对于编号部分,则单独作为一个右对齐的段落处理。 ``` #### 方法二:使用制表位精确调整 利用制表符功能可以让公式编号在同一行内完美对齐。这种方法适用于希望保持原有布局的同时微调位置的情形[^4]。 ```plaintext 1. 将光标放置到要插入公式的地方; 2. 插入公式后按Tab键移动到期望的编号位置; 3. 调整水平标尺上的制表位至页面边缘附近,使得编号能贴紧右边框; 4. 输入公式编号(可采用手动输入或是域代码形式)。 ``` #### 方法三:借助表格结构辅助定位 如果上述两种办法仍无法满足需求,考虑构建一个简单的单行双列表格作为载体。这样做的好处是可以更灵活地管理各元素之间的相对关系,同时也便于日后维护修改[^1]。 ```plaintext | 公式 | 编号 | | :---: | ---:| | E=mc² | (1) | 注意这里边框线应设为无颜色以隐藏起来不影响视觉呈现。 ``` 以上三种策略可以根据实际应用场景和个人偏好选用最合适的那一种来进行尝试。通常情况下,合理组合这些技巧往往能达到令人满意的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值