基础结构

  • 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 2
typedef 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_cplusplusunion{int rows;int height;};union{int cols;int width;};#elseint 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
//返回感兴趣的通道,所有通道被选中,返回0
cvGetImageCOI(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
//初始化稀疏矩阵的迭代器,返回第一个元素的指针,矩阵为空返回NULL
CvSparseNode* 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_countconst 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默认0
void 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+gamma
cvAddWeighted(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 substitution
cvSVBkSb(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
//返回浮点型随机数并更新RNG
cvRandReal(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函数的分配/释放

opencv学习之数据结构与数据操作相关推荐

  1. (pytorch-深度学习系列)pytorch数据操作

    pytorch数据操作 基本数据操作,都详细注释了,如下: import torch#5x3的未初始化的Tensor x = torch.empty(5, 3) print("5x3的未初始 ...

  2. Opencv学习笔记四——图像形态学操作

    需要的库和自定义函数 import cv2 import numpy as np import matplotlib.pyplot as pltdef cv_show(name, mat):cv2.i ...

  3. Python+opencv学习记录6:模糊操作

    文章目录 1.模糊操作基本原理 1.1.均值模糊 1.2.中值模糊 1.3.自定义模糊 2.相对应的代码 2.1.均值模糊 2.2.中值模糊 2.3.自定义模糊 完整代码 1.模糊操作基本原理 图像在 ...

  4. R学习笔记之五:数据操作

    一.索引 1.vector 2.matrix和data.frame 对于data.frame,使用attach(x),可以使数据框中的列项,可以像一般向量那样使用:再次直接使用detach(),即可解 ...

  5. OpenCV学习笔记——Mat类型数据存储

    CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number] 比如 CV_8UC3 表示 ...

  6. 10月25日学习内容整理:数据操作:增加更新删除,单表查询操作

    >>\G是按行显示,必须是大写 >>插入数据:补充另一种插入记录的方法 -->insert into 表名1(字段1,字段2,...) select 字段1,字段2,.. ...

  7. Python学习笔记 - 探索字符串数据操作

    大家好,我是Mr数据杨,设想一下,我们身处<三国演义>的热血世界,赵云.曹操.孔明都是我们的亲密朋友.在这个世界里可以用Python的字符串 + 运算符来合并孔明的锦囊妙计和赵云的勇武之谋 ...

  8. unordered_multimap学习之插入数据操作insert,emplace ,emplace_hint

    本篇学习unordered_multimap的插入数据操作,具体的函数如下: insert (C++11) 插入元素或结点 (C++17 起) (公开成员函数) emplace (C++11) 原位构 ...

  9. DB2 9 使用开辟(733 检验)认证指南,第 2 部分: DB2 数据操作(1)

    学习根基不美概念 级别: 中级 Sunil Sabat, 技术同盟司理, PeopleSoft 在本教程中,您将学习 DB2 数据库中数据操作的根基不美概念.这是分 9 部分的系列教程的第 2 部分, ...

最新文章

  1. python基础主要内容_python基础—python的介绍
  2. 大连理工大学计算机原理实验交通灯,大连理工大学计算机原理第四次实验.docx...
  3. 网站建设之前需要先了解目标受众
  4. OGNL探秘之一:数据转换的乐园
  5. OO实现ALV TABLE 三:ALV的功能设计
  6. html弹出div提示自动关闭,html弹出div弹窗
  7. file_get_contents 在本地测试可以, 但在服务器上报错403
  8. 软件质量保证计划_如何做好软件项目的质量管理?
  9. 名片识别信息分类python_python体验名片识别OCR
  10. ASP.NET2.0(学习第一天)
  11. springboot_poi思路
  12. Github客户端下载以及使用方法
  13. office无法office无法卸载无法安装的解决方法卸载无法安装的解决方法
  14. 二进制炸弹——拆弹实验
  15. 群晖docker容器外网访问的问题
  16. 世界十大高楼中国占6座 中东要建第一楼
  17. makefile往tcl中传递参数
  18. LINUX——账号和权限管理
  19. 《iOS APP 性能检测》
  20. 攻防世界writeup——Web(持续更新)

热门文章

  1. 计算机远程桌面是灰色的,Windows Server 2008 R2 允许远程桌面连接这台计算机是灰色解决办法...
  2. 9 设计简介PPT模板
  3. 知识点归档,博客记录
  4. 离散型随机变量及其分布律(习题部分)
  5. Linux的“原罪” 瓶颈中改变的经济规则(转)
  6. java malloc_malloc和free函数详解
  7. java篇(二)Windows下的java环境搭建(jdk环境详细配置)
  8. kodi 开源播放器的编译移植
  9. idea自动导包 自动删除
  10. html在表中加入输入框,HTML表单和输入文本框