1. 程式人生 > >OpenCV 建立影象時,CV_8UC1,CV_32FC3,CV_32S等引數的含義

OpenCV 建立影象時,CV_8UC1,CV_32FC3,CV_32S等引數的含義

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

bit_depth:位元數---代表8bite,16bites,32bites,64bites...

舉個例子吧--比如說:

如果你現在建立了一個儲存--灰度圖片的Mat物件,這個影象的大小為寬100,高100,那麼,現在這張灰度圖片中有10000個畫素點,它每一個畫素點在記憶體空間所佔的空間大小是8bite,8位--所以它對應的就是CV_8。

---------------------------------------------------------------------------

S|U|F:

S--代表---signed int---有符號整形

U--代表--unsigned int--無符號整形

F--代表--float---------單精度浮點型

----------------------------------------------------------------------------

C<number_of_channels>----代表---一張圖片的通道數,比如:

channels = 1:灰度圖片--grayImg---是--單通道影象

channels = 3:RGB彩色影象---------是--3通道影象

channels = 4:帶Alph通道的RGB影象--是--4通道影象

可以這麼建立Mat類物件

Mat(int rows, int cols, int _type);

或 Mat(Size size,int  _type);

 _type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.

 注意:我們偶爾會發現不帶通道數的型別,如:CV_32S,CV_8U等等。

其實,不帶通道數的這些型別就是預設通道數為1。

例如,CV_8U就等同於CV_8UC1,CV_32S就等同於CV_32SC1。

imshow函式在顯示影象時,會將各種型別的資料都對映到[0, 255]。

如下:

·  如果載入的影象是8位無符號型別(8-bit unsigned),就顯示影象本來的樣子。

·  如果影象是16位無符號型別(16-bit unsigned)或32位整型(32-bit integer),便用畫素值除以256。也就是說,值的範圍是 [0,255 x 256]對映到[0,255]。

·  如果影象是32位或64位浮點型(32-bit floating-point or 64-bit floating-point),畫素值便要乘以255。也就是說,該值的範圍是 [0,1]對映到[0,255]。 

 如:CV_8U的灰度或BGR影象的顏色分量都在0~255之間。直接imshow可以顯示影象。 CV_32F或者CV_64F取值範圍為0~1.0,imshow的時候會把影象乘以255後再顯示。