OpenCV圖像中的數據類型

    OpenCV裏面的許多數據結構爲了達到內存使用的最優化,通常都會給它最小上限的空間來分配變量。舉個例子,一般標準的圖片爲RGB格式,它們的格式爲每一個通道(R/G/B)的大小爲8bits,範圍爲0~255。假如每一個通道都爲int類型,那麼一個通道整整浪費了24bits的空間;假設有個640*480的BMP文件存儲在內存,那整整浪費了640*480*3*(32-8)bits的內存空間,總共浪費了2.6MB!,也就是那 2.6MB內什麼東西都沒存儲;如果今天以8bits的格式來存儲則只使用到0.6MB的內存而已,即(640*480*3*(8)+54 bits),因此,選取與文件格式對應的數據類型是十分重要的。

    除了要考慮數據類型的位數外,還要考慮數據類型的正負號的問題。一般的圖像文件中的數據是不存在負號的。圖像中的數據類型除了float及double外,char,int,short int都是用二的補數表示法,它們不具正負號bit,而float,double則是用IEEE 754標準,他們分別在第32bit和64bit上有一個正負號位。

附:float類型佔用4字節,精度達6-7位有效數字,表示範圍爲-3.4E38 到 3.4E38;double類型佔用8字節,精度達15~16位有效數字,表示範圍爲-1.79E308 到 1.79E308。

    下面以IplImage和CvMat這兩種opencv中常見的圖像類型爲例子,他們對應的創建函數分別爲cvCreateImage()和cvCreateMat(),來介紹opencv圖像中的數據類型:

1、unsigned integer:8bits,範圍爲0~255(一般的圖像文件格式使用的大小)

IplImage數據結構參數:IPL_DEPTH_8U

CvMat數據結構參數:CV_8UC1,CV_8UC2,CV_8UC3,CV_8UC4

 

2、signed integer:8bits,範圍爲-128~127

IplImage數據結構參數:IPL_DEPTH_8S;CvMat數據結構參數:CV_8SC1,CV_8SC2,CV_8SC3,CV_8SC4

 

3、unsigned integer:16bits,範圍爲0~65535

IplImage數據結構參數:IPL_DEPTH_16U;CvMat數據結構參數:CV_16UC1,CV_16UC2,CV_16UC3,CV_16UC4

 

4、signed integer:16bits,範圍爲-32768~32767

IplImage數據結構參數:IPL_DEPTH_16S;CvMat數據結構參數:CV_16SC1,CV_16SC2,CV_16SC3,CV_16SC4

 

5、signed integer:32bits,範圍爲-2147483648~2147483647

IplImage數據結構參數:IPL_DEPTH_32S;CvMat數據結構參數:CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4

 

6、float:32bits,範圍爲1.18*10^-38~3.40*10^38

IplImage數據結構參數:IPL_DEPTH_32F;CvMat數據結構參數:CV_32FC1,CV_32FC2,CV_32FC3,CV_32FC4

 

7、double:64bits,範圍爲2.23*10^-308~1.79*10^308

CvMat數據結構參數:CV_64FC1,CV_64FC2,CV_64FC3,CV_64FC4

 

8、unsigned:1bit,範圍爲0~1

IplImage數據結構參數:IPL_DEPTH_1U;

 

此外64bits的signed integer,即int64或者long long;64bits的unsigned integer,即uint64或者unsigned long long。


發佈了93 篇原創文章 · 獲贊 97 · 訪問量 104萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章