在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也是一个宏定义,