OpenCV图像中的数据类型
OpenCV⾥⾯的许多数据结构为了达到內存使⽤的最优化,通常都会给它最⼩上限的空间来分配变量。举个例⼦,⼀般标准的图⽚为RGB格式,它们的格式为每⼀个通道(R/G/B)的⼤⼩为8bits,范围为0~255。假如每⼀个通道都为int类型,那么⼀个通道整整浪费了24bits的空间;假设有个640*480的BMP⽂件存储在內存,那整整浪费了640*480*3*(32-8)bits的內存空间,总共浪费了2.6MB!,也就是那 2.6MB内什么东西都没存储;如果今天以8bits的格式来存储则只使⽤到0.6MB的內存⽽已,即(640*480*3*(8)+54 bits),因此,选取与⽂件格式对应的数据类型是⼗分重要的。
除了要考虑数据类型的位数外,还要考虑数据类型的正负号的问题。⼀般的图像⽂件中的数据是不存在负号的。图像中的数据类型除了float及double
外,char,int,short int都是⽤⼆的补数表⽰法,它们不具正负号bit,⽽float,double则是⽤IEEE 754标准,他们分别在第32bit和64bit上有⼀个正负号位。
附:float类型占⽤4字节,精度达6-7位有效数字,表⽰范围为-3.4E38 到 3.4E38;double类型占⽤8字节,精度达15~16位有效数字,表⽰范围为-1.79E308 到1.79E308。
parameter数据类型下⾯以IplImage和CvMat这两种opencv中常见的图像类型为例⼦,他们对应的创建函数分别为cvCreateImage()和cvCreateMat(),来介绍opencv图像中的数据类型:
1、unsigned integer:8bits,范围为0~255(⼀般的图像⽂件格式使⽤的⼤⼩)
IplImage数据结构参数:IPL_DEPTH_8U
CvMat数据结构参数:CV_8UC1,CV_8UC2,CV_8UC3,CV_8UC4
2、signed integer:8bits,范围为-128~127
IplImage数据结构参数:IPL_DEPTH_8S;CvMat数据结构参数:CV_8SC1,CV_8SC2,CV_8SC3,CV_8SC4
3、unsigned integer:16bits,范围为0~65535
IplImage数据结构参数:IPL_DEPTH_16U;CvMat数据结构参数:CV_16UC1,CV_16UC2,CV_16UC3,CV_16UC4
4、signed integer:16bits,范围为-32768~32767
IplImage数据结构参数:IPL_DEPTH_16S;CvMat数据结构参数:CV_16SC1,CV_16SC2,CV_16SC3,CV_16SC4
5、signed integer:32bits,范围为-2147483648~2147483647
IplImage数据结构参数:IPL_DEPTH_32S;CvMat数据结构参数:CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4
6、float:32bits,范围为1.18*10^-38~3.40*10^38
IplImage数据结构参数:IPL_DEPTH_32F;CvMat数据结构参数:CV_32FC1,CV_32FC2,CV_32FC3,CV_32FC4
7、double:64bits,范围为2.23*10^-308~1.79*10^308
CvMat数据结构参数:CV_64FC1,CV_64FC2,CV_64FC3,CV_64FC4
8、unsigned:1bit,范围为0~1
IplImage数据结构参数:IPL_DEPTH_1U;
此外64bits的signed integer,即int64或者long long;64bits的unsigned integer,即uint64或者unsigned long long
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论