在openCV中常常会使用CV_32UC1等相似的字符,这里简单说明含义,作为备忘录。
标识含义
CV_表示是openCV中的宏定义。32是指这个数据是一个32位数据,相同的还有8,16,64三种。U是unsigned的首字母,代表最高位表示计数,而不是符号位。除此之外还有:F,float的首字母,表示浮点数;S,signed首字母,表示有符号的数。后面的C1是channel 1的含义。就是指通道数是1,相应的也有C2,C3等。注意没有C,C,C1这三个表示的是同一种含义。例如CV_32S,CV_32SC,CV_32SC1都是32位有符号整数的含义。
与标准数据结构的对应
openCV数据 | 标准数据 |
---|---|
CV_8U | unsigned char (uchar) |
CV_8S | char |
CV_16S | short |
CV_16U | unsigned short (ushort) |
CV_32F | float |
CV_32S | int |
CV_64F | double |
以上的符号之后如果添加C,C1,不改变含义。
访问方法
访问Mat数据结构有三种方法,我常用的是使用at函数。使用时需要指定数据类型,例如mymat.at<char>(i,j)=3;
。注意对于列表中不包含C,以及只含有C和C1的数据结构,访问时使用对应的标准数据就可以。不过不可以混用,即使unsigned char和char也不可以混用,同样的8位二进制所表示的含义是不同的。
对于后面是C2及以上的通道数的数据,使用标准数据会发生数组越界或者存取逻辑错误。应该采用Vec3b等类似的openCV自带数据结构来访问。这里的3就是指通道数是3,相应的还有2,4,6,8。之后的b表示数据结构,我们用下表说明这个符号和标准数据的关系
Vec中符号 | 标准数据 |
---|---|
b | uchar |
d | double |
f | float |
i | int |
s | short |
w | ushort |
当中只有CV_8SC系列没有对应的变量,除此之外都有。