opencv 宏
来源:互联网 发布:php去除重复数组值 编辑:程序博客网 时间:2024/06/07 21:09
1、CV_MAKETYPE(depth,cn) 宏
作用:#define CV_MAKETYPE(depth,cn) 宏读入位深度depth和通道数cn生成矩阵类型type.
Depth是位深度,定义如下:
#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
#define CV_USRTYPE1 7
Depth的最大值为8,一般0到7,即CV_8U到CV_USRTYPE1:
#define CV_CN_SHIFT 3
#define CV_DEPTH_MAX (1 << CV_CN_SHIFT)
Cn为通道数,cn的最大值为64:
#define CV_CN_MAX 64
#define CV_MAKETYPE(depth,cn)将depth作低三位,cn-1作高6位(Cn-1的值为0到63,占用6位),形成type值,type最大可为9位:
#define CV_MAKETYPE(depth,cn) ((depth) + (((cn)-1) << CV_CN_SHIFT))
例如:
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
2、CV_MAT_TYPE(flags)宏
作用:CV_MAT_TYPE(flags)宏读入类型type,并将type规范化为9位的矩阵类型。
#define CV_CN_MAX 64
#define CV_CN_SHIFT 3
#define CV_DEPTH_MAX (1 << CV_CN_SHIFT)
#define CV_MAT_TYPE_MASK (CV_DEPTH_MAX*CV_CN_MAX - 1)
#define CV_MAT_TYPE(flags) ((flags) & CV_MAT_TYPE_MASK)
CV_MAT_TYPE_MASK为511,十六进制为0x1FF; CV_MAT_TYPE(flags)将flags截为9位,flags一般为type,所以CV_MAT_TYPE(flags)宏用来规范type值:type正常为9位,如果超过9位(比如将通道cn 定义为64以上),可用CV_MAT_TYPE(flags)宏将type 值规范为9位以内。
3、CV_MAT_CN(flags)宏
作用:CV_MAT_CN(flags)宏用来求矩阵类型flags的通道数
#define CV_MAT_CN_MASK ((CV_CN_MAX - 1) << CV_CN_SHIFT)
#define CV_MAT_CN(flags) ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1)
理解了CV_MAKETYPE(depth,cn) 宏就不难理解CV_MAT_CN(flags)宏了。
4、 CV_ELEM_SIZE(type)宏
作用:计算类型type的“通道数*位深度所占字节”值
#define CV_ELEM_SIZE(type) /
(CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3))
((sizeof(size_t)/4+1)*16384|0x3a50)的值为oxba50,其二进制值为1011,1010,0101,0000。(0xba50>>depth*2)&3的值见下表的第四列,经过该运算,具有相同位深度字节数的type有相同的(0xba50>>depth*2)&3值(如CV_8U和CV_8S结果都为00,CV_32S和CV_32F的结果都为10)。CV_ELEM_SIZE(type)为通道数向左移动”(0xba50>>depth*2)&3”个bit位,即通道数乘以2的”(0xba50>>depth*2)&3”次方,见下表第五列,可见,CV_8U和CV_8S所占字节为1,CV_32S和CV_32F所占字节为4。
depth
Value
depth*2
(0xba50>>depth*2)&3
(二进制)
CV_ELEM_SIZE(type)
CV_8U
0
0
00
cn*pow(2,0)=cn*1
CV_8S
1
2
00
cn*pow(2,0)=cn*1
CV_16U
2
4
01
cn*pow(2,1)=cn*2
CV_16S
3
6
01
cn*pow(2,1)=cn*2
CV_32S
4
8
10
cn*pow(2,2)=cn*4
CV_32F
5
10
10
cn*pow(2,2)=cn*4
CV_64F
6
12
11
cn*pow(2,3)=cn*8
CV_USRTYPE1
7
14
10
cn*pow(2,2)=cn*4
- opencv宏
- opencv宏
- opencv宏
- opencv 宏
- OpenCV小试牛刀1——OPENCV宏
- OpenCV的一些宏
- opencv取像素宏
- opencv取像素宏
- Opencv理解CV_DEFAULT宏
- opencv
- openCV
- openCV
- Opencv
- opencv
- opencv
- opencv
- OpenCV
- OpenCV
- FPGA设计略讲
- Android核心分析 之二方法论探讨之概念空间篇
- Knockout.js随手记(2)
- mini2440 驱动ds18b20
- Web Service
- opencv 宏
- 在StringGrid中每行添加一个选择框(checkbox)
- 谷歌技术"三宝"之BigTable
- 【android开发】手机应用管理器的实现之获取应用列表(一)
- 机器学习入门
- Uninstall Trillian with WindowsUninstaller.Org Removal Tips
- 搜狗曝重大安全漏洞 大量用户隐私被泄露
- cef wpf 遇到的问题
- log10()的运用