图像深度

    xiaoxiao2021-03-25  270

    图像深度是指存储每个像素所用的位数,也用于量度图像的色彩分辨率.图像深度确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数.它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级.比如一幅单色图像,若每个象素有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。

    再举个例子: 如果图像只存rgb值,深度就是3,等于通道数,获取图片信息时每隔三个字节读取一个像素。 如果是灰度图,只有一个值,通道是1,获取图片信息时每隔一个字节读取一个像素。 Opencv 转化函数,参考opencv 2.3.1 manual Reference [cpp]  view plain copy 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保存。

    转载请注明原文地址: https://ju.6miu.com/read-5679.html

    最新回复(0)