opencv学习之数据结构与数据操作

来源:互联网 发布:php问答系统下载 编辑:程序博客网 时间:2024/06/05 22:48

基础结构

  • CvPoint
//CvPoint定义基于二维坐标的点typedef struct CvPoint{    int x;    int y;}CvPoint;//构造函数inline CvPoint cvPoint(int x,int y);//从CvPoint2D32f转换而来inline cvPoint cvPointFrom32f(CvPoint2D32f point);CvPoint pt1,pt2;pt1.x = 233;pt1.y = 133;pt2.x = 324;pt2.y = 200;
  • CvPoint2D32f
//定义基于二维浮点坐标的点typedef struct CvPoint2D32f{    float x;    float y;}CvPoint2D32f;//构造函数inline CvPoint2D32f cvPoint2D32f(double x,double y);inline CvPoint2D32f cvPointTo32f(CvPoint point);
  • CvPoint3D32f
//定义基于三维浮点坐标的点typedef struct CvPoint3D32f{    float x;    float y;    float z;}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);
  • CvSize2D32f
//以亚像素定义矩形框大小typedef struct CvSize2D32f{    float width;    float height;}CvSize2D32f;inline CvSize2D32f cvSize2D32f(double width,double height);
  • CvRect
//定义矩形框的偏移和大小typedef struct CvRect{    int x;    int y;    int width;    int height;}CvRect;incline CvRect cvRect(...);
  • CvScalar
//定义可以存放1-4个数值的数组typedef struct CvScalar{    double val[4];}CvScalar;//赋值初始化inline CvScalar cvScalar(double val0,double val1,double val2,double val3);inline CvScalar cvScalarAll(double val0123);inline CvScalar cvRealScalar(double val0,0,0,0);
  • CvTermCriteria
//定义迭代算法的终止准则#define CV_TERMCRIT_ITER 1#define CV_TERMCRIT_NUMBER CV_TERMCRIT_ITER#define CV_TERMCRIT_EPS 2typedef struct CvTermCriteria{    int type;    int max_iter;//最大迭代次数    double epsilon;//精确度}CvTermCriteria;
  • CvMat
//定义多通道矩阵typedef struct CvMat{    int type;    int step;    int* refcount;    union{        uchar* ptr;        short* s;        int* i;        float* fl;        double* db;    }data;//data指针    #ifdef_cplusplus    union{        int rows;        int height;    };    union{        int cols;        int width;    };    #else    int rows;    int cols;    #endif}CvMat;
  • CvMatND
//定义多维、多通道稠密数组typedef struct CvMatND{    int type;    int dims;//数组维数    int* refcount;//数据参考计数    union{        uchar* ptr;        short* s;        int* i;        float* fl;        double* db;    }data;    struct{        int size;        int step;    }dim[CV_MAX_DIM];}CvMatND;
  • CvSparseMat
//定义多维、多通道稀疏数组typedef ...{    int type;    int dims;    int* refcount;    struct CvSet* heap;//哈希表节点池    void** hashtable;    int hashsize;    int total;//数组节点数    int valoffset;//数组节点值在字节中的偏移    int idxoffset;//节点索引偏移    int size[CV_MAX_DIM];//维数大小}CvSparseMat;
  • IplImage
//定义图像的头部typedef struct _IplImage{    int nSize;//大小    int ID;    int nChannels;    int alphaChannel;    int depth;//像素位数    char colorMode[4];    char channelSeq[4];    int dataOrder;//交叉、分开的颜色通道    int origin;    int align;//对齐方式    int width;    int height;    struct _IplROI* roi;    struct _IplImage* maskROI;    void* imageld;    struct _IplTileInfo* tileInfo;    int imageSize;    char* imageData;    int widthStep;    int BorderMode[4];    int BorderConst[4];    char* imageDataOrigin;}IplImage;
  • CvArr
//定义不明确的数组typedef void CvArr;

数组操作

初始化

  • CreateImage
//创建图像头,并分配数据IplImage* cvCreateImage(CvSize size,int depth,int channels);
  • CreateImageHeader
//分配和初始化图像头,并且返回指向IplImage结构的指针IplImage* cvCreateImageHeader(CvSize size,int depth,int channels);
  • ReleaseImageHeader
cvReleaseImageHeader(IplImage** image);
  • ReleaseImage
//释放头和数据cvReleaseImage(IplImage** image);
  • InitImageHeader
//初始化并返回指针IplImage* cvInitImageHeader(IplImage* image,CvSize size,int depth,int channels,int origin=0,int align=4);//origin取值IPL_ORIGIN_TL或IPL_ORIGIN_BL//align表示图像行排列,4或8字节
  • CloneImage
//备份图像IplImage* cvCloneImage(const IplImage* image);
  • SetImageCOI
//基于给定值设置感兴趣的通道//0表示所有,1表示第一个,2表示第二个等等cvSetImageCOI(IplImage* image,int coi);
  • GetImageCOI
//返回感兴趣的通道,所有通道被选中,返回0cvGetImageCOI(const IplImage* image);
  • SetImageROI
//基于给定的矩形设置图像的ROI(感兴趣区域)cvSetImageROI(IplImage* image,CvRect rect);
  • ResetImageROI
//释放ROI//释放后图像被全部选中cvResetImageROI(IplImage* image);
  • GetImageROI
//返回图像的ROI坐标CvRect cvGetImageROI(const IplImage* image);
  • CreateMat
//为新矩阵分配头和数据,并返回指向矩阵的指针//type为矩阵类型CV_(bit_depth)(S|U|F)C(number_of_channels)CvMat* cvCreatMat(int rows,int cols,int type);
  • CreateMatHeader
//分配新的矩阵头,并返回指针CvMat* cvCreatMatHeader(int rows,int cols,int type);
  • ReleaseMat
//释放矩阵内存void cvReleaseMat(CvMat** mat);
  • InitMatHeader
//初始化矩阵CvMat* cvInitMatHeader(CvMat* mat,int rows,int cols,int type,                    void* data=NULL,int step = CV_AUTOSTEP);
  • Mat
//初始化CvMat cvMat(int rows,int cols,int type,void* data=NULL);
  • CloneMat
//备份矩阵CvMat* cvCloneMat(const CvMat* mat);
  • CreateMatND
//为多维稠密矩阵分配头和数据,并返回矩阵的指针CvMatND* cvCreateMatND(int dims,const int* sizes,int type);
  • CreateMatNDHeader
//分配头给多维稠密矩阵CvMatND* cvCreateMatNDHeader(int dims,const int* sizes,int type);
  • ReleaseMatND
//缩减矩阵参考计数并释放矩阵头void cvReleaseMatND(CvMatND** mat);
  • InitMatNDHeader
//初始化用户指定的多维矩阵头CvMatND* cvInitMatNDHeader(CvMatND* mat,int dims,const int* sizes,int type,void* data=NULL);
  • CloneMatND
CvMatND* cvCloneMatND(const CvMatND* mat);
  • DecRefData
//数组数据的引用计数减一//计数为0时删除数据//只有cvCreateData分配时计数才非空void cvDecRefData(CvArr* arr);
  • IncRefData
//计数加一int cvIncRefData(CvArr* arr);
  • CreateData
//分配图像、矩阵或则多维数组的数据void cvCreateData(CvArr* arr);
  • ReleaseData
//释放数组数据void cvReleaseData(CvArr* arr);
  • SetData
//指派用户数据的数组头//step表示整行字节长void cvSetData(CvArr* arr,void* data,int step);
  • GetRawData
//获得数组的底层信息//step输出行字节长//roi_size输出ROI尺寸void cvGetRawData(const CvArr* arr,uchar** data,int* step=NULL,                        CvSize* roi_size=NULL);
  • GetMat
//从输出的数组返回矩阵头//header结构指针,作为临时缓存CvMat* cvGetMat(const CvArr* arr,CvMat* header,int* coi=NULL,                        int allowND=0);
  • GetImage
//从输出数组获得图像头IplImage* cvGetImage(const CvArr* arr,IplImage* image_header);
  • CreateSparseMat
//创建多维稀疏矩阵//size为矩阵每一维的大小CvSparseMat* cvCreateSparseMat(int dims,const int* sizes,int type);
  • ReleaseSparseMat
//释放稀疏矩阵void cvReleaseSparseMat(CvSparseMat** mat);
  • CloneSparseMat
CvSparseMat* cvCloneSparseMat(conse CvSparseMat* mat);

获取元素和数组子集

  • GetSubRect
//根据输入的图像或矩阵的矩阵数组子集返回矩阵头CvMat* cvGetSubRect(const CvArr* arr,CvMat* submat,CvRect rect);
  • GetRow,GetRows,GetCol,GetCols
//根据指定的行或行跨度从输入数组中返回对应的矩阵头//submat返回子矩阵头的指针CvMat* cvGetRow(const CvArr* arr,CvMat* submat,int row);CvMat* cvGetRows(const CvArr* arr,CvMat* submat,int start_row,                        int end_row,int delta_row=1);
  • GetDiag
//根据参数diag返回指定的矩阵对角线CvMat* cvGetDiag(const CvArr* arr,CvMat* submat,int diag=0);
  • GetSize
//返回行数列数CvSize cvGetSize(const CvArr* arr);
  • InitSparseMatIterator
//初始化稀疏矩阵的迭代器,返回第一个元素的指针,矩阵为空返回NULLCvSparseNode* cvInitSparseMatIterator(const CvSparseMat* mat,                            CvSparseMatIterstor* mat_iterator);
  • GetNextSparseNode
//移动迭代器到下一个稀疏矩阵元素并返回指向他的指针CvSparseNode* cvGetNextSparseNode(CvSparseMatIterator* mat_iterator);
  • GetElemType
//返回数组元素类型int cvGetElemType(const CvArr* arr);
  • GetDims,GetDimSize
//前者返回数组维数及其大小;后者返回数组指定维的大小int cvGetDims(const CvArr* arr,int* sizes=Null);int cvGetDimSize(const CvArr* arr,int index);
  • Ptr*D
//返回指向特殊元素的指针uchar* cvPtr1D(const CvArr* arr,int idx0,int* type=Null);uchar* cvPtr2D(const CvArr* arr,int idx0,int idx1;int* type=Null);uchar* cvPtrND(const CvArr* arr,int* idx,int* type=Null,                    int create_node=1,unsigned* precalc_hashval=Null);
  • Get*D
//返回指定数组元素CvScalar cvGet1D(const CvArr* arr,int idx0);CvScalar cvGet2D(const CvArr* arr,int idx0,int idx1);CvScalar cvGetND(const CvArr* arr,int* idx);
  • GetReal*D
//返回单通道数组的指定元素double cvGetReal1D(const CvArr* arr,int idx0);double cvGetRealND(const CvArr* arr,int* idx);
  • mGet
//返回单通道浮点矩阵指定元素double cvmGet(const CvMat* mat,int row,int col);
  • Set*D
//修改指定数组元素的值void cvSet1D(CvArr* arr,int idx0,CvScalar value);void cvSetND(CvArr* arr,int* idx,CvScalar value);
  • SetReal*D
//将新值分配给单通道数组的指定元素void cvSetReal1D(CvArr* arr,int idx0,double value);void cvSetRealND(CvArr* arr,int* idx,double value);
  • MSet
//为单通道浮点矩阵的指定元素赋值void cvmSet(CvMat* mat,int row,int col,double value);
  • ClearND
//清除指定密集型数组的元素或者删除稀疏数组的元素void cvClearND(CvArr* arr,int* idx);

复制和添加

  • Copy
//mask为掩码,选取指定区域复制给目标矩阵void cvCopy(const CvArr* src,CvArr* dst,const CvArr* mask=Null);
  • Set
//为数组的每个元素设置数值void cvSet(CvArr* arr,CvScalar value,const CvArr* mask=Null);
  • SetZero
//置零void cvSetZero(CvArr* arr);
  • SetIdentity
//初始化带尺寸的单位矩阵//value为赋值给对角线的值void cvSetIdentity(CvArr* mat,CvSacar value=cvRealScalar(1));
  • Range
//用给定范围的数填充矩阵[0,1,2,3,4,5,6]void cvRange(CvArr* mat,double start,double end);

变换和置换

  • Reshape
//修改矩阵形状,不复制数据//new_cv新的通道数,new_rows新的行数CvMat* cvReshape(const CvArr* arr,CvMat* header,int new_cn,int new_rows=0);
  • ReshapeMatND
//修改多维数组形状,可能复制数据CvArr* cvReshapeMatND(const CvArr* arr,int sizeof_header,CvArr* header,                    int new_cn,int new_dims,int* new_sizes);
  • Repeat
//用输入数组重复的填充输出数组void cvRepeat(const CvArr* src,CvArr* dst);
  • Flip
//垂直、水平翻转二维数组//大于0水平翻转,等于0垂直翻转,小于0水平垂直翻转void cvFlip(const CvArr* src,CvArr* dst=Null,int flip_mode=0);
  • Split
//将多通道数组分割成几个单通道数组,或者从数组中提取一个通道void cvSplit(const CvArr* src,CvArr* dst0,CvArr* dst1,CvArr* dst2,CvArr* dst3);
  • Merge
//由几个单通道数组组合为多通道数组,或插入一个单通道数组void cvMerge(const CvArr* src0,const CvArr* src1,const CvArr* src2,                    const CvArr* src3,CvArr* dst);
  • MixChannels
//将数组的几个通道复制到输出数组指定的通道//改变通道顺序,添加删除alpha通道,抽取通道void cvMixChannels(const CvArr** src,int src_count,CvArr** dst,int dst_count                    const int* from_to,int pair_count);//==============================================//切分RGBA四通道,生成RGB三通道,交换R\B,丢弃alpha通道CvMat* rgba = cvCreateMat(100,100,CV_8UC4);CvMat* bgr = cvCreateMat(rgba->rows,rgba->cols,CV_8UC3);CvMat* alpha = cvCreateMat(rgba->rows,rgba->cols,CV_8UC1);CvArr* out[]={bgr,alpha};int from_to[] = {0,2,1,1,2,0,3,3};cvSet(rgba,cvScalar(1,2,3,4));cvMixChannles((const CvArr**)&rgba,1,out,2,from_to,4);
  • RandShuffle
//随机排布数组内元素void cvRandShuffle(Cvarr* mat,CvRNG* rng,double iter_factor=1);

算术、逻辑和比较运算

  • LUT
//使用查表的值填充void cvLUT(Const CvArr* src,CvArr* dst,const CvArr* lut);//dst(i)=lut[src(i)+delta]//CV_8U时delta=0;CV_8S为128
  • ConvertScale
//使用线性变换转换数组//按比例默认1缩放,填充shift默认0void cvConvertScale(const CvArr* src,CvArr* dst,double scale=1,double shift=0);
  • ConvertScaleAbs
//使用线性变换将输入数组元素转换为8位无符号整数void cvConvertScaleAbs(const CvArr* src,CvArr* dst,double scale=1,double shift=0);
  • Add,Sub
//计算两数组每个元素之和,差//mask为掩码,指定相加区域cvAdd(src1,src2,dst,const CvArr* mask=Null);
  • AddS,SubS,SubRS
//计算数组与数值之和,差cvAddS(src,num,dst,mask=Null);
  • AddWeighted
//两数组加权和//alpha\beta\gamma分别为权值//d=a1*ahpha+a2*beta+gammacvAddWeighted(src1,double alpha,src2,double beta,double gamma,dst);
  • Mul,Div
//点乘,除//scale为比例因子cvMul(src1,src2,dst,double scale = 1);//d=a1.*a2*scale
  • And,AndS,Or,Ors,Xor,XorS,Not
//逻辑运算cvAnd(src1,src2,dst,mask=Null);
  • Cmp,CmpS
//比较两数组之间的关系,以0-1填充dst//cmp_op为CV_CMP_EQ,等于//cmp_op为CV_CMP_GT,a1大于a2//cmp_op为CV_CMP_GE,大于等于//cmp_op为CV_CMP_LT,小于//cmp_op为CV_CMP_LE,小于等于//cmp_op为CV_CMP_NE,不等于cvCmp(src1,src2,dst,int cmp_op);
  • InRange,InRangeS
//检查数组元素是否在两个数组之间cvInRange(src,low,up,dst);
  • Max,MaxS,Min,MinS
//查找两个数组所以元素的最大值,最小值cvMax(src1,src2,dst);
  • AbsDiff,AbsDiffS
//计算两个数组差的绝对值cvAbsDiff(src1,scr2,dst);

统计

  • CountNonZero
//返回指定数组中非零元素的个数//arr必须为单通道数组或者设置了COI的多通道图像cvCountNonZero(arr);
  • Sum
//计算数组元素之和cvSum(arr);
  • Avg
//平均值cvAvg(arr,mask=Null);
  • AvgSdv
//平均值,标准差cvAvgSdv(arr,CvScalar* mean,CvScalar* std_dev,const CvArr* mask=Null);
  • MinMaxLoc
//查找数组元素中的最大值、最小值,以及他们的位置cvMinMaxLoc(arr,double* min,double* max,CvPiont* min_p=Null,CvPoint* max_p=Null,const CvArr* mask=Null);
  • Norm
//计算数组的绝对范数。arr2为Null则为arr1的绝对范数//绝对差分范数//相对差分范数cvNorm(arr1,arr2=Null,type=CV_L2,mask=Null);
  • Reduce
//将矩阵转换成向量cvReduce(src,dst,dim,op);//dim为0表示降维为一行,1表示一列,-1为自动选择//op为CV_REDUCE_SUM,输出为所有行/列的和//AVG中值,MAX最大值,MIN最小值

线性代数

  • DotProduct
//利用欧几里得准则计算两个数组的点积cvDotProduct(src1,src2);
  • CrossProduct
//计算叉积cvCrossProduct(src1,src2,dst);
  • Normalize
//按照某种范数或者数字范围归一化矩阵cvNormalize(src,dst,double a=1,double b=0,int type=CV_L2,mask=Null);//a 输出矩阵的最小值、最大值,或者矩阵范数的最小值、最大值//b 输出矩阵的最大值、最小值,或者矩阵范数的最大值、最小值
  • ScaleAdd
//计算一个数组缩放后与另一个数组之和cvScaleAdd(src1,CvScalar scale,src2,dst);//scale为缩放因子
  • GEMM
//执行通用矩阵乘法cvGEMM(src1,src2,alpha,src3,beta,dst,int tABC=0);//src3为偏移量,可以空//tABC=CV_CEMM_A_T,转置src1,B转置src2,C转置src3
  • Transform
//对数组每一个元素执行矩阵变换cvTransform(src,dst,const CvMat* transmat,const CvMat* shiftvec=Null);//transmat变换矩阵,shiftvec可选偏移量
  • PerspectiveTransform
//对向量数组进行透视变换cvPerspectiveTransform(src,dst,const CvMat* mat);//mat为3*3或者4*4变换矩阵
  • MulTransposed
//数组与其转置的乘积cvMulTransposed(src,dst,order,const CvArr* delta=NULL);//order为乘法顺序
  • Trace
//返回矩阵的迹cvTrace(const CvArr* mat);
  • Transpose
//转置cvTranspose(src,dst);
  • Det
//返回矩阵行列式的值cvDet(const CvArr* mat);
  • Invert
//求矩阵的逆矩阵或伪逆矩阵cvInvert(src,dst,CV_LU);//CV_LU高斯消除法//CV_SVD奇异值分解法,src是奇异的时候计算伪逆矩阵//CV_SVD_SYM正定对称矩阵的SVD法
  • Solve
//求解线性系统或者最小二乘法问题cvSolve(src1,src2,dst,CV_LU);
  • SVD
//对实数浮点数矩阵进行奇异值分解cvSVD(CvArr* A,W,U=null,V=null,int flags=0);//A为输入,W奇异值矩阵//flags为CV_SVD_MODIFY_A,操作修改矩阵A,处理变快//CV_SVD_U_T,返回转置矩阵U,变快//CV_SVD_V_T,返回转置矩阵V,变快
  • SVBkSb
//奇异值回代算法back substitutioncvSVBkSb(W,U,V,B,X,flags);//W奇异值矩阵//U左正交矩阵//V右正交矩阵//B可省略//X目标矩阵
  • EigenVV
//计算对称矩阵的特征值evals,特征向量evects//速度慢,精确度低。//若已知A是正定的或者协方差矩阵,可以用cvSVD求特征值、特征向量//U=V为特征向量,W为特征值cvEigenVV(A,evects,evals,double eps=0);
  • CalcCovarMatrix
//计算输入向量的协方差矩阵和平均向量cvCalcCovarMatrix(const CvArr** A,count,CvArr* out,CvArr* avg,flags);//count为输入向量个数//out为协方差矩阵//flags以不同方式计算协方差
  • Mahalanobis
//计算两个向量的马氏距离cvMahalanobis(A,B,C);//C为A、B之间的协方差矩阵的逆矩阵//先计算协方差CalcCovarMatrix在计算逆矩阵Invert
  • CalcPCA
//对一系列向量进行主元分析cvCalcPCA(data,avg,e,g,flags);//data 输入数据//avg 平均值向量//e 协方差矩阵的特征值//g 协方差矩阵的特征向量(主元)//flags 保存为行、列向量,使用预先的平均向量
  • ProjectPCA
//投影输入向量到正交基(特征向量)表示的子空间上cvProjectPCA(data,avg,g,res);//g 特征向量(主元)//res 分解系数的输出矩阵
  • BackProjectPCA
//从投影系数中重构原始向量cvBackProjectPCA(proj,avg,g,res);

数学函数

  • Round,Floor,Cell
//舍入方法将浮点数转为整数int cvFloor(double val);//Round四舍五入//Floor返回不大于输入的最大整数//Cell返回不小于输入的最小整数
  • Sqrt,InvSqrt,Cbrt,
//计算输入值的平方根,平方根倒数,立方根cvSqrt(double A);
  • FastArctan
//计算二维向量(x,y)的全范围角度cvFastArctan(float y,float x);
  • IsNaN,IsInf
//判断输入是否为一个数字,是否为无穷大cvIsInf(doubel A);
  • CartToPolar
//计算二维向量的长度角度,即直角坐标转极坐标void cvCartToPolar(const CvArr* x,const CvArr* y,CvArr* len,CvArr* angle,int flags=0);//flags默认为弧度制,
  • PolarToCart
//计算极坐标对应的直角坐标cvPolarToCart(len,angle,x,y,flags=0);
  • Pow
//对数组内的每一个元素求幂cvPow(src,dst,power);//power幂指数
  • Exp,Log
//指数幂,绝对值的自然对数cvExp(src,dst);
  • SolveCubic
//求解三次曲线函数的实根cvSolveCubic(A,res);//A为等式系数//res为实根

随机数生成

  • RNG
//初始化随机数生成器并返回其状态CvRNG cvRNG(int64 seed=-1);
  • RandArr
//用均匀分布或正态分布随机矩阵填充数组,并更新RNG状态cvRandArr(CvRNG* rng,CvArr* arr,type,CvScalar p1,CvScalar p2);//arr输出//type为CV_RAND_UNI均匀分布,CV_RAND_NORMAL正态(高斯)//p1 均匀分布的下界,正态分布的均值//p2 均匀分布的上界,正态分布的标准差
  • RandInt
//返回均匀分布的随机32位无符号整型值并更新RNG状态cvRandInt(CvRNG* rng);
  • RandReal
//返回浮点型随机数并更新RNGcvRandReal(CvRNG* rng);

离散变换

  • DFT
//离散傅里叶变换cvDFT(src,dst,flags);//CV_DXT_FORWARD正向一维或二维变换,结果不被缩放//CV_DXT_INVERSE逆向一维二维变换,结果不被缩放//CV_DXT_SCALE对结果进行缩放,即用数组元素除以它//CV_DXT_ROWS对独立的行进行正向逆向变换,高效
  • GetOptimalDFTSize
//对于给定的矢量尺寸返回DFT尺寸cvGetOptimalDFTSize(int size0);//返回最小值N,N大于等于size0,从而使得向量的DFT可以按照FFT快速计算
  • MulSpectrums
//对两个傅里叶频谱的每个元素进行乘法运算cvMulSpectrums(src1,src2,dst,flags);//CV_DXT_ROWS将数组的每一行视为一个单独的频谱//CV_DXT_MUL_CONJ第二个取共轭
  • DCT
//执行一维或者二维浮点数组的离散余弦或者反余弦变换cvDCT(src,dst,flags);//CV_DXT_FORWARD一维或二维余弦变换//CV_DXT_INVERSE一维或二维反余弦变换//CV_DXT_ROWS跟以上组合,减少开销

动态结构

内存储存

数据结构

  • CvMemStorage定义动态内存
  • CvMemBlock定义存储块结构
  • CvMemStoragePos定义内存存储块地址

数据操作

  • CreateMemStorage,ClearMemStorage
//创建一内存块并返回指向块首的指针cvCreateMemStorage(int block_size=0);
  • CreateChildMemStorage
//创建子内存块cvCreateChildMemStorage(CvMemStorage* parent);
  • MemStorageAlloc
//在存储块中分配一内存缓冲cvMemStorageAlloc(CvMemStorage* storage,size_t size);
  • MemStorageAllocString
//分配文本字符串cvMemStorageAllocString(CvMemStorage,const char* ptr,int len = -1);
  • SaveMemStoragePos
//保存内存块的地址cvSaveMemStoragePos(const CvMemStorage* storage,CvMemStoragePos* pos);
  • RestoreMemStoragePos
//恢复内存块的地址cvRestoreMemStoragePos(storage,pos);

序列

数据结构

  • CvSeq 定义非固定元素的序列
  • CvSlice 对序列分割进行定义

数据操作

函数 功能 CreateSeq 创建一序列并返回指针 SetSeqBlockSize 设置序列块的大小 SeqPush 添加元素到尾部 SeqPop 删除尾部元素 SeqPushFront 在头部添加元素 SeqPopFront 删除头部元素 SeqPushMulti 在头部或者尾部添加多个元素 SeqPopMulti 删除头部尾部多个元素 SeqInsert 在序列中插入元素 SeqRemove 删除索引指定的元素 ClearSeq 删除序列中的所有元素 GetSeqElem 返回索引指定的元素指针 SeqElemIdx 返回序列中元素的索引 CvtSeqToArray 复制序列中的元素到一个连续的内存块中 MakeSeqHeaderForArray 构建序列 SeqSlice 为序列碎片建立独立的头 CloneSeq 备份序列 SeqRemoveSlice 删除序列中的slice部分 SeqInsertSlice 在序列中插入数组 SeqInvert 对序列中的元素进行逆序操作 SeqSort 使用特定的比较函数对序列中的元素进行排序 SeqSearch 查询序列中的元素 StartAppendToSeq 将数据写入序列中 StartWriteSeq 创建新序列,并初始化写入状态 EndWriteSeq 完成写入操作 FlushSeqWrite 根据写入状态刷新序列头部 StartReadSeq 初始化序列中的读取过程 GetSeqReaderPos 返回当前读取器的位置 SetSeqReaderPos 返回当前读取器的指定位置

集合

数据结构CvSet定义节点的集合

数据操作

  • CreateSet 创建空的数据集
  • SetAdd 向集合中添加一个元素
  • SetRemove 从点集中删除元素
  • SetNew 将元素添加到点集中
  • SetRemoveByPtr 删除指针指向的集合元素
  • GetSetElem 通过索引值查找相应的集合元素
  • ClearSet 清空点集

数据结构

  • CvGraph 定义有向权图和无向权图
  • CvGraphScanner 定义图的遍历

数据操作

函数 功能 CreateGraph 创建一空图并返回指向该图的指针 GraphAddVtx 将一顶点加入图中,并返回顶点的索引 GraphRemoveVtx 通过索引值从图中删除一顶点 GraphRemoveVtxByPtr 通过指针从图中删除一顶点 GetGraphVtx 通过索引值查找图的相应顶点 GraphVtxIdx 返回与顶点相应的索引值 GraphAddEdge 通过索引在图中加一条边 GraphAddEdgeByPtr 通过指针在图中加一条边 GraphRemoveEdge 通过索引值从图中删除边 GraphRemoveEdgeByPtr 删除边 FindGraphEdge 查找边 FindGraphEdgeByPtr 查找边 GraphEdgeIdx 返回边的索引值 GraphVtxDegree 通过索引值统计与顶点相关联的边数 ClearGraph 删除图 CloneGraph 备份图 CreateGraphSca 逐层遍历整个图 ReleaseGraphScanner 完成图遍历过程,并释放遍历器

数据结构

  • CV_TREE_NODE_FIELDS 用于树节点类型声明的宏
  • CvTreeNodeIterator 定义树节点结构如下

数据操作

  • InitTreeNodeIterator 初始化树节点的迭代器
  • NextTreeNode 待初始化的迭代器
  • PrevTreeNode 返回当前节点,并将迭代器移向前一个节点
  • TreeToNodeSeq 将所有节点指针收集到线性列表中
  • InsertNodeIntoTree 将新节点插入到树中
  • RemoveNodeFromTree 从树中删除节点

绘图函数

曲线与形状

数据结构

  • CV_RGB创建一个色彩值

数据操作

  • Line 绘制连接两点的线段
  • Rectangle 通过对角线的两个顶点绘制矩形
  • Circle 绘制或填充给定圆心半径的原
  • Ellipse 绘制或填充椭圆
  • EllipseBox 绘制或者填充椭圆弧或扇形
  • FillPoly 填充多边形的内部
  • FillConvexPoly 填充多边形的外部
  • PolyLine 绘制多角曲线

文本

  • InitFont 对字体结构初始化
  • PutText 在图像中加入文本
  • GetTextSize 获取字符串文本的宽、高度

点集和轮廓

  • DrawContours 在图像中绘制轮廓
  • InitLineIterator 初始化线段迭代器
  • ClipLine 将超出图像范围的线段剪去,只保留图像内部分
  • Ellipse2Poly 用折线逼近椭圆弧

数据保存和运行时类型信息

文件存储

数据结构

  • CvFileStorage 文件存储器结构
  • CvFileNode 定义文件存储器节点
  • CvAttrList 定义属性列表

数据操作

  • OpenFileStorage 打开文件存储器读、写数据
  • ReleaseFileStorage关闭一个相关文件的存储器并释放临时内存

写数据

函数 功能 StartWriteStruct 向文件存储器中写数据 EndWriteStruct 中止普通的写数据操作 WriteInt 将单独的整数型写入文件存储器 WriteReal 将浮点型写入 WriteString 将字符串文本写入 WriteComment 将注释写入文件存储器 StartNextStream 从文件存储器中打开下一个数据流 Write 将对象写入存储器 WriteRawData 将数组写入存储器 WriteFileNode 将文件节点写入另一个文件存储器

读数据

函数 功能 GetRootFileNode 从文件存储器中得到顶层文件的节点 GetFileNodeByName 在图表或文件存储器中查找节点 GetHashedKey 根据指定名称返回一个唯一的文件存储器指针 GetFileNode 在图表或文件存储器中查找节点 GetFileNodeName 返回文件节点名 ReadInt 从文件节点中得到整型值 ReadIntByName 查找文件节点并返回其整数值 ReadReal 从文件节点中返回浮点数 ReadRealByName 查找文件节点并返回其浮点数 ReadString 从文件节点中返回字符串文本 ReadStringByName 查找文件节点并返回字符串文本 Read 解释用户对象并返回指针 ReadByName 查找对象并解释 ReadRawData 从标量序列的文件节点中读取元素 StartReadRawData 初始化顺序读取器,并从文件节点中读取数据 ReadRawDataSlice 初始化文件节点序列读取器

运行时类型信息和通用函数

类型信息

  • CvTypeInfo 定义类型信息

通用函数

  • RegisterType 按照指定的类型信息结构定义一个新类型
  • UnregisterType 通过指定名称删除已定义的类型
  • FirstType 返回类型列表中的第一个类型
  • FindType 通过类型名查找指定类型
  • TypeOf 返回指定对象的类型
  • Release 查找指定对象的类型,然后使用该类型的release删除该对象
  • Clone 复制该对象
  • Save 保存对象到文件
  • Load 打开对象

其他混合函数

  • CheckArr 检查输入数组的每个元素是否为非法值
  • KMean2 按照给定的聚类数目拆分向量的集合
  • SeqPartition 拆分序列为等效的类

错误处理和系统函数

错误处理

  • GetErrStatus 返回当前错误状态
  • SetErrStatus 将错误状态设置为指定值
  • GetErrMode 返回当前错误模式
  • SetErrMode 设置指定的错误模式
  • Error 产生一个错误
  • ErrorStr 返回指定错误状态编码的原文描述
  • RedirectError 设置一个新的错误处理器
  • NullDevReport,StdErrReport,GuiBoxReport 提供标准错误操作

系统函数

  • Alloc 分配内存缓冲区大小,并返回分配的缓冲区指针
  • Free 释放缓冲区
  • GetTickCount 返回时钟计数
  • GetTickFrequency 返回每个微秒的时钟数
  • RegisterModule 添加模块到模块列表
  • GetModuleInfo 检索注册模块和插件的信息
  • UseOptimized 在优化和不优化两个模式中切换
  • SetMemoryMannager 分配自定义/默认内存管理函数
  • SetIPLAllocator 切换图像IPL函数的分配/释放
阅读全文
0 0
原创粉丝点击