位深度讲解,opencv8位单通道和32位单通道解析

在记录数字图像的颜色时,计算机实际是用每个像素需要的位深度来表示的,黑白二色的图像是数字图像中最简单的一种,它只有黑、白两种颜色,也就是说它的每个像素只有1位颜色,位深度是1,用2的一次幂来表示;考虑到位深度平均分给R、G、B和Alpha,而只有RGB可以互相组合成颜色。所以4为颜色的图,它的位深度是4,只有2的四次幂种颜色,即16种颜色(或灰度级)。8位颜色的图,位深度是8,用2的8次幂表示,含有256中颜色(或灰度级)。24位颜色可称之为真彩色,位深度是24,含有2的24次幂种颜色(或灰度级),即:16777216种颜色,超过了人眼能够分辨的颜色数量。当我们用24位来记录颜色时,实际上是以2的3*8次幂,即R、G、B各以2的8次幂,256种颜色而存在,三色组合就形成了16777216种颜色。

8位二进制等于1字节,16位二进制等于2字节,32位二进制等于4字节。一般人眼很难看出1/256亮度的变化,何况256的平方分之一,所以通常显示器只能显示256个灰阶,16777216种颜色。虽然计算机的显示屏只能显示一定分辨率的色阶,但是将存储的图像转换成位数高的图像,能够对转换后的图像进行处理得到更精确的数据,针对于8位、16位、32位单通道图像而言表示的不同程度的灰度级,随之相应的精度也不同,表示的位数越高图像的分辨率越高,对图像进行相应的处理就越精确。

下面是Opencv中位深度讲解:

opencv的IplImage结构中有这么一个成员:depth。
其取值如下:
枚举值

用%d输出 二进制(U结尾的是无符号类型,S结尾的是有符号类型)

IPL_DEPTH_8U : 8 : 0x0000 0008
IPL_DEPTH_8S :

-2147483640 : 0xffff fff8

IPL_DEPTH_16U : 16 : 0x0000 0010
IPL_DEPTH_16S : -2147483632 : 0xffff fff0
IPL_DEPTH_32S : -2147483616 : 0xffff ffe0
IPL_DEPTH_32F : 32 : 0x0000 0020
IPL_DEPTH_64F : 64 : 0x0000 0040

从文件或摄像头直接读取的图像一般都是8U的
当有特殊计算需求时可以用cvScale() 或cvCvtScale() 转换。
保存时必须转换回8U!


不同的深度其取值范围不一样:
0.0--1.0之间

IPL_DEPTH_64F

0.0--1.0之间

IPL_DEPTH_32F

0--65535之间

IPL_DEPTH_32S

-32768--32767之间

IPL_DEPTH_16S

0--65535之间

IPL_DEPTH_16U

-128--127之间

IPL_DEPTH_8S

0--255之间

IPL_DEPTH_8U


不同深度图像的转换:
要注意范围
比如IPL_DEPTH_8U 转到 IPL_DEPTH_32U
要用cvConvertScale(pImg8, pImg32, 1.0/255, 0); 要除255
反过来IPL_DEPTH_32F 到 IPL_DEPTH_8U
要:cvConverScale(pImg32, pImg8, 255, 0);要乘以2

你可能感兴趣的:(OpenCV)