opencv图像的深度及取值范围

来源:互联网 发布:手机淘宝同城在哪里找 编辑:程序博客网 时间:2024/06/05 08:34

图像的位深度及其取值范围:src.depth()

Mat类型:

矩阵数据类型:

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

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

         如: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


depth图像元素的位深度可以是下面的其中之一:

IPLimage类型:

                        位深度                                                    取值范围

         IPL_DEPTH_8U - 无符号8位整型                         0——255

         IPL_DEPTH_8S - 有符号8位整型                    -127——127

         IPL_DEPTH_16U - 无符号8位整型                       0——65535           

         IPL_DEPTH_16S - 有符号8位整型              -32768——32767 

         IPL_DEPTH_32S - 有符号8位整型                      0——65535

         IPL_DEPTH_32F - 无符号8位整型                     0.0——1.0

         IPL_DEPTH_64F - 有符号8位整型                     0.0——1.0

如上,给出图像的位深度及其取值范围后,我们不难理解,要转换位深度本质上就是对原深度下的数据做线性变换,使原位深度下的最小值和最大值分别对应转换后位深度下的最小值和最大值。实现上述线性变换,我们可以用OpenCV库函数cvConvertScale。

cvConvertScale函数简介:

cvConvertScale( const CvArr* src, CvArr* dst,double scale CV_DEFAULT(1),double shiftCV_DEFAULT(0) );

功能:使用线性变换转换数组

参数说明: src 输入数组,dst 输出数组,scale 比例因子,shift 偏移量。

对应的线性变换公式:dst(I)=src(I)*scale +(shift,shift,...).

比如将IPL_DEPTH_8U 转换成 IPL_DEPTH_32U,我们需要用线性变换将[0 255] 映射为 [0 1]。不难求出线性变换的参数scale=1/255, shift=0。

所以:要实现不同位深度间数据的转换,首先我们需要知道不同位深度对应数据的取值范围,然后计算出关于两取值范围上下限的线性变换,最后将图像数据和线性变换参数代入函数cvConvertScale()。

原创粉丝点击