opencv影象的深度及取值範圍
影象的位深度及其取值範圍:src.depth()
Mat型別:
矩陣資料型別:
—— CV_<bit_depth>(S|U|F)C<number_of_channels>
S= 符號整型 U=無符號整形 F=浮點型
如:CV_8UC1 表示一個8位無符號整型單通道矩陣
CV_32FC2 表示一個32位浮點型雙通道矩陣
還有其他一些格式如下:
CV_8UC1 CV_8SC1 CV_16U
C1 CV_16SC1 CV_8UC2 CV_8SC2
depth影象元素的位深度可以是下面的其中之一:
IPLimage型別:
位深度 取值範圍
IPL_DEPTH_8U - 無符號8位整型 0——255
IPL_DEPTH_8S - 有符號8位整型 -127——127
IPL_DEPTH_16U - 無符號8位整型 0——65535
IPL_DEPTH_16S - 有符號8位整型 -32768——32767
IPL_DEPTH_32S - 有符號8位整型
0——65535
IPL_DEPTH_32F - 無符號8位整型 0.0——1.0
IPL_DEPTH_64F - 有符號8位整型 0.0——1.0
如上,給出影象的位深度及其取值範圍後,我們不難理解,要轉換位深度本質上就是對原深度下的資料做線性變換,使原位深度下的最小值和最大值分別對應轉換後位深度下的最小值和最大值。實現上述線性變換,我們可以用OpenCV庫函式cvConvertScale。
cvConvertScale函式簡介:
cvConvertScale( const CvArr* src, CvArr* dst,double scale CV_DEFAULT(1),double shiftCV_DEFAULT(0) );
功能:使用線性變換轉換陣列
引數說明: src 輸入陣列,dst 輸出陣列,scale 比例因子,shift 偏移量。
對應的線性變換公式:dst(I)=src(I)*scale +(shift,shift,...).
比如將IPL_DEPTH_8U 轉換成 IPL_DEPTH_32U,我們需要用線性變換將[0 255] 對映為 [0 1]。不難求出線性變換的引數scale=1/255,
shift=0。
所以:要實現不同位深度間資料的轉換,首先我們需要知道不同位深度對應資料的取值範圍,然後計算出關於兩取值範圍上下限的線性變換,最後將影象資料和線性變換引數代入函式cvConvertScale()。