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。

    下面以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。


你可能感兴趣的:(图像处理/计算机视觉,OpenCV,opencv,图像数据类型)