openCV数据符号说明

在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系列没有对应的变量,除此之外都有。

猜你喜欢

转载自blog.csdn.net/sgdd123/article/details/80664891