opencv学习之数据结构与数据操作
基础结构
- 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学习之数据结构与数据操作相关推荐
- (pytorch-深度学习系列)pytorch数据操作
pytorch数据操作 基本数据操作,都详细注释了,如下: import torch#5x3的未初始化的Tensor x = torch.empty(5, 3) print("5x3的未初始 ...
- Opencv学习笔记四——图像形态学操作
需要的库和自定义函数 import cv2 import numpy as np import matplotlib.pyplot as pltdef cv_show(name, mat):cv2.i ...
- Python+opencv学习记录6:模糊操作
文章目录 1.模糊操作基本原理 1.1.均值模糊 1.2.中值模糊 1.3.自定义模糊 2.相对应的代码 2.1.均值模糊 2.2.中值模糊 2.3.自定义模糊 完整代码 1.模糊操作基本原理 图像在 ...
- R学习笔记之五:数据操作
一.索引 1.vector 2.matrix和data.frame 对于data.frame,使用attach(x),可以使数据框中的列项,可以像一般向量那样使用:再次直接使用detach(),即可解 ...
- OpenCV学习笔记——Mat类型数据存储
CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number] 比如 CV_8UC3 表示 ...
- 10月25日学习内容整理:数据操作:增加更新删除,单表查询操作
>>\G是按行显示,必须是大写 >>插入数据:补充另一种插入记录的方法 -->insert into 表名1(字段1,字段2,...) select 字段1,字段2,.. ...
- Python学习笔记 - 探索字符串数据操作
大家好,我是Mr数据杨,设想一下,我们身处<三国演义>的热血世界,赵云.曹操.孔明都是我们的亲密朋友.在这个世界里可以用Python的字符串 + 运算符来合并孔明的锦囊妙计和赵云的勇武之谋 ...
- unordered_multimap学习之插入数据操作insert,emplace ,emplace_hint
本篇学习unordered_multimap的插入数据操作,具体的函数如下: insert (C++11) 插入元素或结点 (C++17 起) (公开成员函数) emplace (C++11) 原位构 ...
- DB2 9 使用开辟(733 检验)认证指南,第 2 部分: DB2 数据操作(1)
学习根基不美概念 级别: 中级 Sunil Sabat, 技术同盟司理, PeopleSoft 在本教程中,您将学习 DB2 数据库中数据操作的根基不美概念.这是分 9 部分的系列教程的第 2 部分, ...
最新文章
- python基础主要内容_python基础—python的介绍
- 大连理工大学计算机原理实验交通灯,大连理工大学计算机原理第四次实验.docx...
- 网站建设之前需要先了解目标受众
- OGNL探秘之一:数据转换的乐园
- OO实现ALV TABLE 三:ALV的功能设计
- html弹出div提示自动关闭,html弹出div弹窗
- file_get_contents 在本地测试可以, 但在服务器上报错403
- 软件质量保证计划_如何做好软件项目的质量管理?
- 名片识别信息分类python_python体验名片识别OCR
- ASP.NET2.0(学习第一天)
- springboot_poi思路
- Github客户端下载以及使用方法
- office无法office无法卸载无法安装的解决方法卸载无法安装的解决方法
- 二进制炸弹——拆弹实验
- 群晖docker容器外网访问的问题
- 世界十大高楼中国占6座 中东要建第一楼
- makefile往tcl中传递参数
- LINUX——账号和权限管理
- 《iOS APP 性能检测》
- 攻防世界writeup——Web(持续更新)
热门文章
- 计算机远程桌面是灰色的,Windows Server 2008 R2 允许远程桌面连接这台计算机是灰色解决办法...
- 9 设计简介PPT模板
- 知识点归档,博客记录
- 离散型随机变量及其分布律(习题部分)
- Linux的“原罪” 瓶颈中改变的经济规则(转)
- java malloc_malloc和free函数详解
- java篇(二)Windows下的java环境搭建(jdk环境详细配置)
- kodi 开源播放器的编译移植
- idea自动导包 自动删除
- html在表中加入输入框,HTML表单和输入文本框