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
其中,通道表示每個點能存放多少個數,類似於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儲存。下