天天看點

opencv圖像基礎--圖像深度

圖像深度是指存儲每個像素所用的位數,也用于量度圖像的色彩分辨率.圖像深度确定彩色圖像的每個像素可能有的顔色數,或者确定灰階圖像的每個像素可能有的灰階級數.它決定了彩色圖像中可出現的最多顔色數,或灰階圖像中的最大灰階等級.比如一幅單色圖像,若每個象素有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。

Opencv 轉化函數,參考opencv 2.3.1 manual Reference [cpp]  view plain copy

  1. Converts one array to another with optional linear transformation.  
  2. C: void cvConvertScale(const CvArr* src, CvArr* dst, double scale=1, double shift=0)  
  3. #define cvCvtScale cvConvertScale  
  4. #define cvScale cvConvertScale  
  5. #define cvConvert(src, dst ) cvConvertScale((src), (dst), 1, 0 )  
  6. Parameters:  
  7. src – Source array  
  8. dst – Destination array  
  9. scale – Scale factor  
  10. 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儲存。下

轉載:http://blog.csdn.net/dingfc/article/details/7457984