OpenCV图像中的数据类型
2014-09-25 23:08
183 查看
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。
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的基本数据类型与简单图像处理函数
- OpenCV中double和float类型图像数据的访问
- OpenCV图像中的数据类型
- OpenCV中利用cvConvertScale()将图像的数据类型由u8转化为64f.
- OpenCV中利用cvConvertScale()将图像的数据类型由u8转化为64f...
- Opencv中访问图像数据类型
- 图像数据类型的转换 matlab opencv
- 如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型
- 【Opencv笔记】图像的基本数据类型
- opencv Mat 显示不同数据类型图像
- OpenCv (正式篇)6----core组件--Mat(最基本的图像数据类型)
- Halcon 与 OpenCV 图像数据类型转换
- Halcon 与 OpenCV 图像数据类型转换
- Halcon 与 OpenCV 图像数据类型转换 HObject和 Mat
- 使用GDI+可以方便的把OpenCV的图像矩阵类型数据显示在MFC的窗口中
- [opencv]图像处理的基本数据类型以及通道和维度理解
- opencv中的几种常见的图像数据类型
- 关于OpenCV中利用函数cvConvert实现图像数据类型转换(8U->16S)
- OpenCV图像数据类型Mat不再陌生