圖像數據結構
- IPL 圖像:
IplImage
|-- int nChannels; // 色彩通道數(1,2,3,4)
|-- int depth; // 象素色深:
| // IPL_DEPTH_8U, IPL_DEPTH_8S,
| // IPL_DEPTH_16U,IPL_DEPTH_16S,
| // IPL_DEPTH_32S,IPL_DEPTH_32F,
| // IPL_DEPTH_64F
|-- int width; // 圖像寬度(象素點數)
|-- int height; // 圖像高度(象素點數)
|-- char* imageData; // 指針指向成一列排列的圖像數據
| // 注意色彩順序爲BGR
|-- int dataOrder; // 0 - 彩色通道交叉存取 BGRBGRBGR,
| // 1 - 彩色通道分隔存取 BBBGGGRRR
| // 函數cvCreateImage只能創建交叉存取的圖像
|-- int origin; // 0 - 起點爲左上角,
| // 1 - 起點爲右下角(Windows位圖bitmap格式)
|-- int widthStep; // 每行圖像數據所佔字節大小
|-- int imageSize; // 圖像數據所佔字節大小 = 高度*每行圖像數據字節大小
|-- struct _IplROI *roi;// 圖像ROI. 若不爲NULL則表示需要處理的圖像
| // 區域.
|-- char *imageDataOrigin; // 指針指向圖像數據原點
| // (用來校準圖像存儲單元的重新分配)
|
|-- int align; // 圖像行校準: 4或8字節校準
| // OpenCV不採用它而使用widthStep
|-- char colorModel[4]; // 圖像色彩模型 - 被OpenCV忽略
矩陣與向量
- 矩陣:
CvMat // 2維數組
|-- int type; // 元素類型(uchar,short,int,float,double)
|-- int step; // 一行所佔字節長度
|-- int rows, cols; // 尺寸大小
|-- int height, width; // 備用尺寸參照
|-- union data;
|-- uchar* ptr; // 針對unsigned char矩陣的數據指針
|-- short* s; // 針對short矩陣的數據指針
|-- int* i; // 針對integer矩陣的數據指針
|-- float* fl; // 針對float矩陣的數據指針
|-- double* db; // 針對double矩陣的數據指針
CvMatND // N-維數組
|-- int type; // 元素類型(uchar,short,int,float,double)
|-- int dims; // 數組維數
|-- union data;
| |-- uchar* ptr; // 針對unsigned char矩陣的數據指針
| |-- short* s; // 針對short矩陣的數據指針
| |-- int* i; // 針對integer矩陣的數據指針
| |-- float* fl; // 針對float矩陣的數據指針
| |-- double* db; // 針對double矩陣的數據指針
|
|-- struct dim[]; // 每個維的信息
|-- size; // 該維內元素個數
|-- step; // 該維內元素之間偏移量
CvSparseMat // 稀疏N維數組
- 通用數組:
CvArr* // 僅作爲函數參數,說明函數接受多種類型的數組,例如:
// IplImage*, CvMat* 或者 CvSeq*.
// 只需通過分析數組頭部的前4字節便可確定數組類型
- 標量:
CvScalar
|-- double val[4]; //4D向量
初始化函數:
CvScalar s = cvScalar(double val0, double val1=0, double val2=0, double val3=0);
舉例:
CvScalar s = cvScalar(20.0);
s.val[0]=10.0;
注意:初始化函數與數據結構同名,只是首字母小寫. 它不是C++的構造函數.
其他數據結構
- 點:
CvPoint p = cvPoint(int x, int y);
CvPoint2D32f p = cvPoint2D32f(float x, float y);
CvPoint3D32f p = cvPoint3D32f(float x, float y, float z);
例如:
p.x=5.0;
p.y=5.0;
- 長方形尺寸:
CvSize r = cvSize(int width, int height);
CvSize2D32f r = cvSize2D32f(float width, float height);
- 帶偏移量的長方形尺寸:
CvRect r = cvRect(int x, int y, int width, int height);