1. 程式人生 > >opencv 影象的深度和通道介紹

opencv 影象的深度和通道介紹

矩陣資料型別:

 CV_<bit_depth>(S|U|F)C<number_of_channels>

S = 符號整型 U = 無符號整型 F = 浮點型

E.g.:

CV_8UC1 是指一個8位無符號整型單通道矩陣,

CV_32FC2是指一個32位浮點型雙通道矩陣

CV_8UC1 CV_8SC1 CV_16U C1 CV_16SC1 CV_8UC2 CV_8SC2 CV_16UC2 CV_16SC2 CV_8UC3 CV_8SC3 CV_16UC3 CV_16SC3 CV_8UC4 CV_8SC4 CV_16UC4 CV_16SC4 CV_32SC1

 CV_32FC1 CV_64FC1CV_32SC2 CV_32FC2 CV_64FC2CV_32SC3 CV_32FC3 CV_64FC3CV_32SC4 CV_32FC4 CV_64FC4

其中,通道表示每個點能存放多少個數,類似於RGB彩色圖中的每個畫素點有三個值,即三通道的。

圖片中的深度表示每個值由多少位來儲存,是一個精度問題,一般圖片是8bit(位)的,則深度是8.

前面講到IplImage的資料結構,IplImage支援

IPL_DEPTH_8U,無符號8bit整數(8u)
IPL_DEPTH_8S,有符號8bit整數(8s)
IPL_DEPTH_16S,有符號16bit整數(16s)
IPL_DEPTH_32S,有符號32bit整數(32s)
IPL_DEPTH_32F,32bit浮點數,單精度(32f)

IPL_DEPTH_64F,64bit浮點數,雙精度(64f)

 IplImage支援1,2,3,4個通道,使用nChannels域標明。

CvMat *mat=cvCreateMat(rows,cols,CV_<bit_depth>(S|U|F)C<number_of_channels>);

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

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