opencv 圖像深度(depth)


原文地址: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  

 

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保存。下


免責聲明!

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



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