opencv中图像的基本结构 类型的定义
生活随笔
收集整理的這篇文章主要介紹了
opencv中图像的基本结构 类型的定义
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
CvPoint
二維坐標系下的點,類型為整型
typedef struct CvPoint{int x; /* X坐標, 通常以0為基點 */int y; /* y坐標, 通常以0為基點 */} CvPoint; /* 構造函數 */ inline CvPoint cvPoint( int x, int y ); /* 從 CvPoint2D32f類型轉換得來 */ inline CvPoint cvPointFrom32f( CvPoint2D32f point ) [編輯]CvPoint2D32f
二維坐標下的點,類型為浮點
typedef struct CvPoint2D32f{float x; /* X坐標, 通常以0為基點*/float y; /* Y坐標, 通常以0為基點*/} CvPoint2D32f; /* 構造函數 */ inline CvPoint2D32f cvPoint2D32f( double x, double y ); /* 從CvPoint轉換來 */ inline CvPoint2D32f cvPointTo32f( CvPoint point ); [編輯]CvPoint3D32f
三維坐標下的點,類型為浮點
typedef struct CvPoint3D32f{float x; /* x-坐標, 通常基于0 */float y; /* y-坐標, 通常基于0 */float z; /* z-坐標, 通常基于0 */}CvPoint3D32f; /* 構造函數 */ inline CvPoint3D32f cvPoint3D32f( double x, double y, double z ); [編輯]CvSize
矩形框大小,以像素為精度
typedef struct CvSize{int width; /* 矩形寬 */int height; /* 矩形高 */}CvSize; /* 構造函數 */ inline CvSize cvSize( int width, int height );注意:構造函數的cv是小寫!
[編輯]CvSize2D32f
以亞像素精度標量矩形框大小
typedef struct CvSize2D32f{float width; /* 矩形寬 */float height; /* 矩形高 */}CvSize2D32f; /* 構造函數*/ inline CvSize2D32f cvSize2D32f( double width, double height ); {CvSize2D32f s;s.width = (float)width;s.height = (float)height;return s; } [編輯]CvRect
矩形框的偏移和大小
typedef struct CvRect{int x; /* 方形的最左角的x-坐標 */int y; /* 方形的最上或者最下角的y-坐標 */int width; /* 寬 */int height; /* 高 */}CvRect; /* 構造函數*/ inline CvRect cvRect( int x, int y, int width, int height ); { CvRect os;os.x = x;os.y = y;os.width = width;os.height = heigth;reture os; } [編輯]CvScalar
可存放在1-,2-,3-,4-TUPLE類型的捆綁數據的容器
typedef struct CvScalar{double val[4]}CvScalar; /* 構造函數:用val0初始化val[0]用val1初始化val[1], 以此類推*/ inline CvScalar cvScalar( double val0, double val1,double val2, double val3);{ CvScalar arr;arr.val[4] = {val0,val1,val2,val3};reture arr;} /* 構造函數:用val0123初始化所有val[0]...val[3] */ inline CvScalar cvScalarAll( double val0123 );{ CvScalar arr;arr.val[4] = {val0123,val0123,val0123,val0123,};reture arr;} /* 構造函數:用val0初始化val[0],用0初始化val[1],val[2],val[3] */ inline CvScalar cvRealScalar( double val0 );{ CvScalar arr;arr.val[4] = {val0};reture arr;}http://doc.blueruby.mydns.jp/opencv/classes/OpenCV/CvScalar.html
[編輯]CvTermCriteria
迭代算法的終止準則
#define CV_TERMCRIT_ITER 1 #define CV_TERMCRIT_NUMBER CV_TERMCRIT_ITER #define CV_TERMCRIT_EPS 2typedef struct CvTermCriteria{int type; /* CV_TERMCRIT_ITER 和CV_TERMCRIT_EPS二值之一,或者二者的組合 */int max_iter; /* 最大迭代次數 */double epsilon; /* 結果的精確性 */}CvTermCriteria; /* 構造函數 */ inline CvTermCriteria cvTermCriteria( int type, int max_iter, double epsilon ); /* 在滿足max_iter和epsilon的條件下檢查終止準則并將其轉換使得type=CV_TERMCRIT_ITER+CV_TERMCRIT_EPS */ CvTermCriteria cvCheckTermCriteria( CvTermCriteria criteria,double default_eps,int default_max_iters ); [編輯]CvMat
多通道矩陣
typedef struct CvMat{int type; /* CvMat 標識 (CV_MAT_MAGIC_VAL), 元素類型和標記 */int step; /* 以字節為單位的行數據長度*/int* refcount; /* 數據引用計數 */union{uchar* ptr;short* s;int* i;float* fl;double* db;} data; /* data 指針 */#ifdef __cplusplusunion{int rows;int height;};union{int cols;int width;};#elseint rows; /* 行數 */int cols; /* 列數*/#endif} CvMat; [編輯]CvMatND
多維、多通道密集數組
typedef struct CvMatND{int type; /* CvMatND 標識(CV_MATND_MAGIC_VAL), 元素類型和標號*/int dims; /* 數組維數 */int* refcount; /* 數據參考計數 */union{uchar* ptr;short* s;int* i;float* fl;double* db;} data; /* data 指針*//* 每維的數據結構 (元素號,以字節為單位的元素之間的距離)是配套定義的 */struct{int size;int step;}dim[CV_MAX_DIM];} CvMatND; [編輯]CvSparseMat
多維、多通道稀疏數組
typedef struct CvSparseMat{int type; /* CvSparseMat 標識 (CV_SPARSE_MAT_MAGIC_VAL), 元素類型和標號 */int dims; /* 維數 */int* refcount; /* 參考數量 - 未用 */struct CvSet* heap; /* HASH表節點池 */void** hashtable; /* HASH表:每個入口有一個節點列表,有相同的 "以HASH大小為模板的HASH值" */int hashsize; /* HASH表大小 */int total; /* 稀疏數組的節點數 */int valoffset; /* 數組節點值在字節中的偏移 */int idxoffset; /* 數組節點索引在字節中的偏移 */int size[CV_MAX_DIM]; /*維大小 */} CvSparseMat; [編輯]IplImage
IPL 圖像頭
typedef struct _IplImage{int nSize; /* IplImage大小,=sizeof(IplImage)*/int ID; /* 版本 (=0)*/int nChannels; /* 大多數OPENCV函數支持1,2,3 或 4 個通道 */int alphaChannel; /* 被OpenCV忽略 */int depth; /* 像素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F 可支持 */char colorModel[4]; /* 被OpenCV忽略 */char channelSeq[4]; /* 被OpenCV忽略 */int dataOrder; /* 0 - 交叉存取顏色通道,對三通道RGB圖像,像素存儲順序為BGR BGR BGR ... BGR;1 - 分開的顏色通道,對三通道RGB圖像,像素存儲順序為RRR...R GGG...G BBB...B。cvCreateImage只能創建交叉存取圖像 */int origin; /* 0 - 頂—左結構,1 - 底—左結構 (Windows bitmaps 風格) */int align; /* 圖像行排列 (4 or 8). OpenCV 忽略它,使用 widthStep 代替 */int width; /* 圖像寬像素數 */int height; /* 圖像高像素數*/struct _IplROI *roi;/* 圖像感興趣區域. 當該值非空只對該區域進行處理 */struct _IplImage *maskROI; /* 在 OpenCV中必須置NULL */void *imageId; /* 同上*/struct _IplTileInfo *tileInfo; /*同上*/int imageSize; /* 圖像數據大小(在交叉存取格式下imageSize=image->height*image->widthStep),單位字節*/char *imageData; /* 指向排列的圖像數據 */int widthStep; /* 排列的圖像行大小,以字節為單位 */int BorderMode[4]; /* 邊際結束模式, 被OpenCV忽略 */int BorderConst[4]; /* 同上 */char *imageDataOrigin; /* 指針指向一個不同的圖像數據結構(不是必須排列的),是為了糾正圖像內存分配準備的 */}IplImage;IplImage結構來自于 Intel Image Processing Library(是其本身所具有的)。OpenCV 只支持其中的一個子集:
- alphaChannel 在OpenCV中被忽略。
- colorModel 和channelSeq 被OpenCV忽略。OpenCV顏色轉換的唯一函數 cvCvtColor將原圖像的顏色空間和目標圖像的顏色空間都作為一個參數。
- dataOrder 必須是IPL_DATA_ORDER_PIXEL (顏色通道是交叉存取),然而平面圖像的被選擇通道可以被處理,就像COI(感興趣的通道)被設置過一樣。
- align 是被OpenCV忽略的,而用 widthStep 去訪問后繼的圖像行。
- 不支持maskROI 。處理MASK的函數把他當作一個分離的參數。MASK在 OpenCV 里是 8-bit,然而在 IPL他是 1-bit。
- tileInfo 不支持。
- BorderMode和BorderConst是不支持的。每個 OpenCV 函數處理像素的鄰近的像素,通常使用單一的固定代碼邊際模式。
除了上述限制,OpenCV處理ROI有不同的要求。要求原圖像和目標圖像的尺寸或 ROI的尺寸必須(根據不同的操作,例如cvPyrDown 目標圖像的寬(高)必須等于原圖像的寬(高)除以2 ±1)精確匹配,而IPL處理交叉區域,如圖像的大小或ROI大小可能是完全獨立的。
[編輯]CvArr
不確定數組
typedef void CvArr;CvArr* 僅僅是被用于作函數的參數,用于指示函數接收的數組類型可以不止一個,如 IplImage*, CvMat* 甚至 CvSeq*. 最終的數組類型是在運行時通過分析數組頭的前4 個字節判斷。
總結
以上是生活随笔為你收集整理的opencv中图像的基本结构 类型的定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyrDown和pyrUp函数
- 下一篇: opencv随机数的产生