2008年7月2日 星期三

變數的對應

在OpenCV裡面,許多資料結構為了達到記憶體使用的最佳化,通常都會給它最小的上限的空間來分配變數,有的資料結構也會因為圖檔格式的關係而給予適當的變數,因此需要知道它們宣告的空間大小來配置適當的變數.

一般標準的圖片,為RGB格式它們的大小為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),因此,對於檔案格式的對應是一件很重要的事

在這邊除了要考慮bits的空間外,還要考慮使用型別的正負號的問題,一般的圖檔是不存在負號的,如果今天即使選對空間,可是出現的結果卻是負的,那就功虧一簣了.這裡除了Float及double型別,char,int,short int都是用二的補數表示法,它們不具正負號bit,而Float,double則是用IEEE 754,在第32bit,64bit上有一個正負號bit.

cvCreateImage()及cvCreateMat()對應

1.Unsigned 8bits(一般的圖檔格式使用的大小)
IplImage資料結構參數:IPL_DEPTH_8U
CvMat資料結構參數:CV_8UC1,CV_8UC2,CV_8UC3,CV_8UC4



變數型別空間大小範圍其他
uchar 8bits 0~255 (OpenCV預設變數,同等unsigned char)
unsigned char 8bits 0~255 

2.Signed 8bits
IplImage資料結構參數:IPL_DEPTH_8S
CvMat資料結構參數:CV_8SC1,CV_8SC2,CV_8SC3,CV_8SC4


變數型別空間大小範圍其他
char8bits-128~127 

3.Unsigned 16bits
IplImage資料結構參數:IPL_DEPTH_16U
CvMat資料結構參數:CV_16UC1,CV_16UC2,CV_16UC3,CV_16UC4


變數型別空間大小範圍其他
ushort 16bits 0~65535 (OpenCV預設變數,同等unsigned short int)
unsigned short int 16bits 0~65535 (unsigned short)

4.Signed 16bits
IplImage資料結構參數:IPL_DEPTH_16S
CvMat資料結構參數:CV_16SC1,CV_16SC2,CV_16SC3,CV_16SC4


變數型別空間大小範圍其他
short int 16bits -32768~32767 (short)

5.Signed 32bits
IplImage資料結構參數:IPL_DEPTH_32S
CvMat資料結構參數:CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4


變數型別空間大小範圍其他
int32bits-2147483648~2147483647(long)

6.Float 32bits
IplImage資料結構參數:IPL_DEPTH_32F
CvMat資料結構參數:CV_32FC1,CV_32FC2,CV_32FC3,CV_32FC4


變數型別空間大小範圍其他
float32bits1.18*10-38~3.40*1038 

7.Double 64bits
CvMat資料結構參數:CV_64FC1,CV_64FC2,CV_64FC3,CV_64FC4


變數型別空間大小範圍其他
double64bits2.23*10-308~1.79*10308 

8.Unsigned 1bit
IplImage資料結構參數:IPL_DEPTH_1U


變數型別空間大小範圍其他
bool1bit0~1 


其他變數應對

1.Signed 64bits
int64
long long

2.Unsigned 64 bits
uint64
unsigned long long



0 意見:

Copyright 2008-2009,yester