opencv 图像的深度和通道介绍

矩阵数据类型:

      CV_<bit_depth>(S|U|F)C<number_of_channels>

S = 符号整型  U = 无符号整型  F = 浮点型

E.g.:

CV_8UC1 是指一个8位无符号整型单通道矩阵,

CV_32FC2是指一个32位浮点型双通道矩阵

CV_8UC1           CV_8SC1          CV_16U C1       CV_16SC1 
CV_8UC2           CV_8SC2          CV_16UC2        CV_16SC2 
CV_8UC3           CV_8SC3          CV_16UC3        CV_16SC3 
CV_8UC4           CV_8SC4          CV_16UC4        CV_16SC4 
CV_32SC1         CV_32FC1         CV_64FC1
CV_32SC2         CV_32FC2         CV_64FC2
CV_32SC3         CV_32FC3         CV_64FC3
CV_32SC4         CV_32FC4         CV_64FC4

 

其中,通道表示每个点能存放多少个数,类似于RGB彩色图中的每个像素点有三个值,即三通道的。

图片中的深度表示每个值由多少位来存储,是一个精度问题,一般图片是8bit(位)的,则深度是8.


前面讲到IplImage的数据结构,IplImage支持

IPL_DEPTH_8U,无符号8bit整数(8u)
IPL_DEPTH_8S,有符号8bit整数(8s)
IPL_DEPTH_16S,有符号16bit整数(16s)
IPL_DEPTH_32S,有符号32bit整数(32s)
IPL_DEPTH_32F,32bit浮点数,单精度(32f)

IPL_DEPTH_64F,64bit浮点数,双精度(64f)

 IplImage支持1,2,3,4个通道,使用nChannels域标明。

CvMat *mat=cvCreateMat(rows,cols,CV_<bit_depth>(S|U|F)C<number_of_channels>);


图像深度是指存储每个像素所用的位数,也用于量度图像的色彩分辨率.图像深度确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数.它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级.比如一幅单色图像,若每个象素有8位,则最大灰度数目为2的8次方,即256.一幅彩色图像RGB3个分量的象素位数分别为4,4,2,则最大颜色数目为2的4+4+2次方,即1024,就是说像素的深度为10位,每个像素可以是1024种颜色中的一种.


例如:一幅画的尺寸是1024*768,深度为16,则它的数据量为1.5M。


计算如下:1024*768*16bit=(1024*768*16)/8字节=[(1024*768*16)/8]/1024KB={[(1024*768*16)/8]/1024}/1024MB。

Converts one array to another with optional linear transformation.  
C: void cvConvertScale(const CvArr* src, CvArr* dst, double scale=1, double shift=0)  
#define cvCvtScale cvConvertScale  
#define cvScale cvConvertScale  
#define cvConvert(src, dst ) cvConvertScale((src), (dst), 1, 0 )  
Parameters:  
src – Source array  
dst – Destination array  
scale – Scale factor  
shift – Value added to the scaled source array elements  


scale (Double)
The value to be multipled with the pixel
shift (Double)
The value to be added to the pixel
Return Value
Image of the specific depth, val = val * scale + shift


如果 scale=1,shift=0 就不会进行比例缩放. 这是一个特殊的优化,相当于该函数的同义函数名:cvConvert 。


如果原来数组和输出数组的类型相同,这是另一种特殊情形,可以被用于比例缩放和平移矩阵或图像,此时相当于该函数的同义函数名:cvScale。


因此可以用这个函数实现不同位深之间的转换,也可以用于不同数据类型之间的转换!






下面转一段别人总结的深度显示范围。
测试double型:0.0--1.0之间                          IPL_DEPTH_64F


测试float型:0.0--1.0之间                             IPL_DEPTH_32F


测试long型:0--65535之间                            IPL_DEPTH_32S        


测试short int型:-32768--32767之间                 IPL_DEPTH_16S       


测试unsigned short int型:0--65535之间             IPL_DEPTH_16U


测试char型:-128--127之间                           IPL_DEPTH_8S         


测试unsigned char型:0--255之间                    IPL_DEPTH_8U


这个时候如果需要保存图像,请记住要先转换到IPL_DEPTH_8U的深度。因为只有8位单通道或者3通道(通道顺序为'BGR')才可以使用cvSaveImage保存。下



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值