opencv 圖像深度(depth)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM