OpenCV基礎數據結構--基礎入門



圖像數據結構

  • 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;         // 
圖像行校準: 48字節校準

  |                       // 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);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章