Mat-成员变量的flags的含义

本文详细解析了OpenCV中Mat类的成员变量flags,包括如何通过flags获取depth、channels、continuity和submatrix等信息。flags的低3位表示data type,4到12位表示channels,第15位表示内存是否连续,第16位表示是否为子矩阵,17到32位代表magic signature。
摘要由CSDN通过智能技术生成

    在Mat中flags的定义如下:

/*! includes several bit-fields:
         - the magic signature
         - continuity flag
         - depth
         - number of channels
     */
    int flags;

    从其描述可以看到,flags是一个int型变量,占4字节内存,共32位,我们把最高位称为第32位,最低位称为第1位,存储的内容可以用来表示当前Mat类对象的depth、channels、magic signature以及continuity等信息,那具体是如何通过flags来获取这些信息呢?下面一一来看。首先看到的是如何获取depth。depth在Mat的定义中有如下7种:

#define CV_8U   0
#define CV_8S   1
#define CV_16U  2
#define CV_16S  3
#define CV_32S  4
#define CV_32F  5
#define CV_64F  6

    7种的话用二进制表示只用3个bit就可以表示了。在opencv中,depth不是一个成员变量,而获取depth的方法是通过以下函数:

inline int Mat::depth() const { return CV_MAT_DEPTH(flags); }

    而其中CV_MAT_DEPTH(flags)是一个宏定义,其定义如下:

#define CV_MAT_DEPTH(flags)     ((flags) & CV_MAT_DEPTH_MASK)

    而其中CV_MAT_DEPTH_MASK也是一个宏定义,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值