原文地址:http://blog.csdn.net/dingfc/article/details/7457984
圖像深度是指存儲每個像素所用的位數,也用於量度圖像的色彩分辨率.圖像深度確定彩色圖像的每個像素可能有的顏色數,或者確定灰度圖像的每個像素可能有的灰度級數.它決定了彩色圖像中可出現的最多顏色數,或灰度圖像中的最大灰度等級.比如一幅單色圖像,若每個象素有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
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
- The value to be multipled with the pixel
- shift (Double)
- The value to be added to the pixel
如果 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保存。下