匹配操作
CVAPI(void) cvCartToPolar( const CvArr*x, const CvArr* y,
CvArr*magnitude, CvArr* angleCV_DEFAULT(NULL),
int angle_in_degreesCV_DEFAULT(0));//笛卡尔坐标转向极坐标,输出元素(量值和角度)是可选的
CVAPI(void) cvPolarToCart( const CvArr*magnitude, const CvArr* angle,CvArr* x, CvArr* y,int angle_in_degreesCV_DEFAULT(0));//极坐标转向笛卡尔坐标,输入元素(量值和角度)可选,如果量值缺失,默认为1’s
CVAPI(void) cvPow( const CvArr*src, CvArr* dst, double power );//指数操作
CVAPI(void) cvExp( const CvArr*src, CvArr* dst );//指数为e的指数操作
CVAPI(void) cvLog( const CvArr*src, CvArr* dst );//自然对数操作
CVAPI(float)cvFastArctan( float y, float x );//反正切操作
CVAPI(float) cvCbrt( float value);//立方根操作
//如果设置CV_CHECK_RANGE,检测数组值是否为NaNs,Infs或者为大数据;
如果设置CV_CHECK_QUIET,在坏数据情况下返回0,否则回调 cvError
#define CV_CHECK_RANGE 1
#define CV_CHECK_QUIET 2
CVAPI(int) cvCheckArr( const CvArr*arr, int flags CV_DEFAULT(0),double min_val CV_DEFAULT(0), double max_valCV_DEFAULT(0));
#define cvCheckArraycvCheckArr
//随机化数组
#define CV_RAND_UNI 0
#define CV_RAND_NORMAL 1
CVAPI(void)cvRandArr( CvRNG* rng, CvArr* arr, int dist_type,CvScalar param1,CvScalar param2 );
CVAPI(void)cvRandShuffle( CvArr* mat, CvRNG*rng, double iter_factorCV_DEFAULT(1.));
//排序
#define CV_SORT_EVERY_ROW0
#define CV_SORT_EVERY_COLUMN1
#define CV_SORT_ASCENDING0
#define CV_SORT_DESCENDING16
CVAPI(void)cvSort( const CvArr* src, CvArr* dst CV_DEFAULT(NULL),CvArr* idxmatCV_DEFAULT(NULL), int flagsCV_DEFAULT(0));
CVAPI(int)cvSolveCubic( const CvMat* coeffs, CvMat* roots );//查找立方根实数解
CVAPI(void)cvSolvePoly(const CvMat* coeffs, CvMat *roots2,intmaxiter CV_DEFAULT(20), int figCV_DEFAULT(100));//查找开方根操作所有的实数解和复数解
矩阵操作
CVAPI(void) cvCrossProduct( const CvArr*src1, const CvArr* src2, CvArr* dst ); //计算3维向量的叉乘
#define cvMatMulAdd(src1, src2, src3, dst ) cvGEMM( (src1), (src2), 1., (src3), 1., (dst), 0 )
#define cvMatMul(src1, src2, dst ) cvMatMulAdd( (src1), (src2), NULL, (dst))
#define CV_GEMM_A_T1
#define CV_GEMM_B_T2
#define CV_GEMM_C_T4
CVAPI(void) cvGEMM( const CvArr*src1, const CvArr* src2, doublealpha,const CvArr* src3, double beta,CvArr*dst, int tABCCV_DEFAULT(0));
#define cvMatMulAddExcvGEMM
CVAPI(void) cvTransform( const CvArr*src, CvArr*dst, const CvMat*transmat,const CvMat* shiftvec CV_DEFAULT(NULL));//转换源数组的每个元素,并且将结果向量存储到目标数组
#define cvMatMulAddScvTransform
CVAPI(void) cvPerspectiveTransform( const CvArr*src, CvArr* dst,const CvMat* mat );//对输入数组的每个元素做透视操作
CVAPI(void)cvMulTransposed( const CvArr* src, CvArr* dst, intorder,const CvArr*deltaCV_DEFAULT(NULL), double scaleCV_DEFAULT(1.) );
CVAPI(void) cvTranspose( const CvArr*src, CvArr* dst );
#define cvTcvTranspose//矩阵转置操作
CVAPI(void) cvCompleteSymm(CvMat* matrix, int LtoR CV_DEFAULT(0) );//完成对称性操作(如果ltoR=0上对称,如果ltoR!=0下对称)
CVAPI(void) cvFlip( const CvArr*src, CvArr* dst CV_DEFAULT(NULL),int flip_mode CV_DEFAULT(0));//如果flip=0做水平映照操作;如果flip=1做垂直映照操作;如果flip=-1,做水平和垂直映照操作。cvFlip(src)将图像垂直和水平旋转
#define cvMirrorcvFlip
#define CV_SVD_MODIFY_A 1
#define CV_SVD_U_T 2
#define CV_SVD_V_T 4
CVAPI(void) cvSVD(CvArr* A, CvArr* W, CvArr* U CV_DEFAULT(NULL),CvArr* V CV_DEFAULT(NULL), int flagsCV_DEFAULT(0));//求奇异矩阵
CVAPI(void) cvSVBkSb( const CvArr*W, const CvArr*U, const CvArr*V, const CvArr* B,CvArr* X, int flags );//求奇异矩阵
#define CV_LU 0
#define CV_SVD1
#define CV_SVD_SYM2
#define CV_CHOLESKY3
#define CV_QR 4
#define CV_NORMAL16
CVAPI(double) cvInvert( const CvArr*src, CvArr*dst, int methodCV_DEFAULT(CV_LU));//矩阵求逆
#define cvInvcvInvert
CVAPI(int) cvSolve( const CvArr*src1, const CvArr* src2, CvArr* dst,int methodCV_DEFAULT(CV_LU));//矩阵线性变换
CVAPI(double)cvDet( const CvArr* mat );//计算输入矩阵的行列式
CVAPI(CvScalar)cvTrace( const CvArr* mat );//计算矩阵迹(主对角线上的元素和)
CVAPI(void) cvEigenVV(CvArr* mat, CvArr* evects, CvArr* evals,double eps CV_DEFAULT(0),int lowindexCV_DEFAULT(-1), int highindexCV_DEFAULT(-1));//查找本征值和对称矩阵向量
//
//CVAPI(void) cvSelectedEigenVV(CvArr* mat, CvArr* evects, CvArr* evals,
// intlowindex, int highindex );
CVAPI(void) cvSetIdentity(CvArr* mat, CvScalar value CV_DEFAULT(cvRealScalar(1)) );//特殊矩阵
CVAPI(CvArr*) cvRange(CvArr* mat, double start, double end );//给定数填充矩阵
//计算一系向量的共变矩阵
#define CV_COVAR_SCRAMBLED0
#define CV_COVAR_NORMAL 1
#define CV_COVAR_USE_AVG 2
#define CV_COVAR_SCALE 4
#define CV_COVAR_ROWS 8
#define CV_COVAR_COLS 16
CVAPI(void) cvCalcCovarMatrix( const CvArr**vects, int count,CvArr* cov_mat, CvArr* avg, int flags );//计算共变矩阵
#define CV_PCA_DATA_AS_ROW0
#define CV_PCA_DATA_AS_COL1
#define CV_PCA_USE_AVG2
CVAPI(void) cvCalcPCA( const CvArr*data, CvArr*mean, CvArr*eigenvals, CvArr* eigenvects, int flags );//计算主分量
CVAPI(void) cvProjectPCA( const CvArr*data, const CvArr* mean,constCvArr* eigenvects, CvArr* result );//计算主分量投影
CVAPI(void) cvBackProjectPCA( const CvArr*proj, const CvArr* mean,const CvArr* eigenvects, CvArr* result);//计算主分量反向投影
CVAPI(double) cvMahalanobis( const CvArr*vec1, const CvArr* vec2,const CvArr* mat );//计算马氏距离
#define cvMahalonobis cvMahalanobis
数组统计
CVAPI(CvScalar) cvSum( const CvArr*arr );//计算数组元素和
CVAPI(int) cvCountNonZero( const CvArr*arr );//计算非0像素元素
CVAPI(CvScalar) cvAvg( const CvArr*arr, const CvArr* mask CV_DEFAULT(NULL) );//计算数组元素的平均值
CVAPI(void) cvAvgSdv( const CvArr*arr, CvScalar* mean, CvScalar* std_dev,const CvArr* mask CV_DEFAULT(NULL));//计算像素值均值和标准差
CVAPI(void) cvMinMaxLoc( const CvArr*arr, double* min_val, double* max_val,CvPoint* min_locCV_DEFAULT(NULL), CvPoint*max_loc CV_DEFAULT(NULL),const CvArr* mask CV_DEFAULT(NULL) );//计算全局最小值,最大值及其他们的位置
//数组范数类型
#define CV_C 1
#define CV_L1 2
#define CV_L2 4
#define CV_NORM_MASK 7
#define CV_RELATIVE 8
#define CV_DIFF 16
#define CV_MINMAX 32
#define CV_DIFF_C (CV_DIFF| CV_C)
#define CV_DIFF_L1 (CV_DIFF| CV_L1)
#define CV_DIFF_L2 (CV_DIFF| CV_L2)
#define CV_RELATIVE_C (CV_RELATIVE| CV_C)
#define CV_RELATIVE_L1 (CV_RELATIVE| CV_L1)
#define CV_RELATIVE_L2 (CV_RELATIVE| CV_L2)
CVAPI(double) cvNorm( const CvArr*arr1, const CvArr* arr2 CV_DEFAULT(NULL),int norm_typeCV_DEFAULT(CV_L2), const CvArr*mask CV_DEFAULT(NULL) );//计算两数组的norm,difference norm or relative difference norm
CVAPI(void) cvNormalize( const CvArr*src, CvArr*dst, double aCV_DEFAULT(1.), double bCV_DEFAULT(0.), int norm_typeCV_DEFAULT(CV_L2),const CvArr* mask CV_DEFAULT(NULL) );
#define CV_REDUCE_SUM0
#define CV_REDUCE_AVG1
#define CV_REDUCE_MAX2
#define CV_REDUCE_MIN3
CVAPI(void) cvReduce( const CvArr*src, CvArr* dst, int dim CV_DEFAULT(-1),int opCV_DEFAULT(CV_REDUCE_SUM) );
离散线性变换和相关函数
#define CV_DXT_FORWARD 0
#define CV_DXT_INVERSE 1
#define CV_DXT_SCALE 2
#define CV_DXT_INV_SCALE(CV_DXT_INVERSE + CV_DXT_SCALE)
#define CV_DXT_INVERSE_SCALECV_DXT_INV_SCALE
#define CV_DXT_ROWS 4
#define CV_DXT_MUL_CONJ8
CVAPI(void) cvDFT( const CvArr*src, CvArr* dst, int flags, int nonzero_rowsCV_DEFAULT(0) );//单一离散傅里叶变换
#define cvFFTcvDFT
CVAPI(void) cvMulSpectrums( const CvArr*src1, const CvArr* src2,CvArr* dst, int flags );//多源离散傅里叶变换
CVAPI(int) cvGetOptimalDFTSize( int size0);//计算最优DFT向量大小size>=size0
CVAPI(void) cvDCT( const CvArr*src, CvArr* dst, int flags );//离散余弦变换
动态数据结构
CVAPI(int)cvSliceLength( CvSlice slice, const CvSeq* seq );//计算序列片的长度(支持负索引值)
CVAPI(CvMemStorage*) cvCreateMemStorage( int block_sizeCV_DEFAULT(0));//创建内存存储单元,block_size == 0表示默认,大小最优值为64k
CVAPI(CvMemStorage*) cvCreateChildMemStorage(CvMemStorage* parent );//创建子内存存储单元,从父内存单元借内存
CVAPI(void) cvReleaseMemStorage(CvMemStorage** storage );//释放内存单元,所有的该子内存单元必须在父内存单元释放前释放。子内存单元释放返回从父内存单元所借的block数
CVAPI(void) cvClearMemStorage(CvMemStorage* storage );//清除所有内存存储单元,使用时一定要注意。分配内存使用cvClearSeq, cvClearSet …,注意不要释放所有的内存。子内存释放返回从父内存所借的块数
CVAPI(void) cvSaveMemStoragePos( const CvMemStorage*storage, CvMemStoragePos* pos );//标记“空白内存”的位置
CVAPI(void) cvRestoreMemStoragePos(CvMemStorage* storage, CvMemStoragePos* pos );//重存储“空白内存”
CVAPI(void*)cvMemStorageAlloc( CvMemStorage* storage, size_t size );//在内存中持续配置特定大小的缓冲
CVAPI(CvString)cvMemStorageAllocString( CvMemStorage* storage, constchar* ptr,int lenCV_DEFAULT(-1) );//配置内存存储字符串
CVAPI(CvSeq*) cvCreateSeq( int seq_flags, int header_size, int elem_size,CvMemStorage* storage );//创建新空白序列在特定内存上
CVAPI(void) cvSetSeqBlockSize(CvSeq* seq, int delta_elems );//改变序列块的默认值,默认值为1K byte
CVAPI(schar*) cvSeqPush(CvSeq* seq, const void* element CV_DEFAULT(NULL));//在序列结尾添加新元素,并返回该元素指针
CVAPI(schar*) cvSeqPushFront(CvSeq* seq, const void* element CV_DEFAULT(NULL));//在序列开头添加新元素,并返回该元素指针
CVAPI(void) cvSeqPop(CvSeq* seq, void* element CV_DEFAULT(NULL));//移除序列的最后元素,并保存该序列
CVAPI(void) cvSeqPopFront(CvSeq* seq, void* element CV_DEFAULT(NULL));//移除序列的开头元素,并保存该序列
#define CV_FRONT1
#define CV_BACK0
CVAPI(void) cvSeqPushMulti(CvSeq* seq, const void* elements, intcount, int in_frontCV_DEFAULT(0) );//在序列末尾添加多个元素
CVAPI(void) cvSeqPopMulti(CvSeq* seq, void* elements,
int count, int in_frontCV_DEFAULT(0) );//在序列末尾移除多个元素
CVAPI(schar*) cvSeqInsert(CvSeq* seq, int before_index,
const void*element CV_DEFAULT(NULL));//在序列中间插入元素
CVAPI(void) cvSeqRemove(CvSeq* seq, int index );//移除给定位置的元素
CVAPI(void) cvClearSeq(CvSeq* seq );//移除序列的所有元素,所释放的内存只能被该序列以后重使用。除非使用cvRestoreMemStoragePos被调用
CVAPI(schar*) cvGetSeqElem( const CvSeq*seq, int index );//获取给定序列的指针,负索引值表示从末尾数的索引值,比如-1表示从序列的最后数的第一个元素
CVAPI(int) cvSeqElemIdx( const CvSeq*seq, const void* element,CvSeqBlock** block CV_DEFAULT(NULL) );//计算给定序列元素的索引值,如果返回-1表示序列不存在该元素
CVAPI(void) cvStartAppendToSeq(CvSeq* seq, CvSeqWriter* writer );//初始化序列写指针,新元素将添加到序列结尾处
CVAPI(void) cvStartWriteSeq( int seq_flags, int header_size,intelem_size,CvMemStorage*storage, CvSeqWriter*writer );//连接cvCreateSeq, cvStartAppendToSeq
CVAPI(CvSeq*) cvEndWriteSeq(CvSeqWriter* writer );//关闭序列写指针,更新序列头部,并返回指向新序列的指针(在用cvStartWriteSeq创建的序列很有用处)
CVAPI(void) cvFlushSeqWriter(CvSeqWriter* writer );//更新序列头部,在访问先前通过cvgEtSeqElem写元素和读元素很有用处
CVAPI(void)cvStartReadSeq( const CvSeq* seq, CvSeqReader* reader,intreverseCV_DEFAULT(0) );//初始化序列写指针,序列可以正向和反向读
CVAPI(int) cvGetSeqReaderPos(CvSeqReader* reader );//返回当前序列读指针位置,当前观察序列元素的位置
CVAPI(void) cvSetSeqReaderPos(CvSeqReader* reader, int index,intis_relative CV_DEFAULT(0));//改变序列读位置,被用来寻找当前位置的绝对和相对位置
CVAPI(void*) cvCvtSeqToArray( const CvSeq*seq, void* elements,CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ) );//持续拷贝序列内容到内存片中
CVAPI(CvSeq*)cvMakeSeqHeaderForArray( int seq_type, intheader_size,int elem_size, void*elements, int total, CvSeq*seq, CvSeqBlock* block );//为数组创建序列头部,之后所有的操作都在序列上
CVAPI(CvSeq*)cvSeqSlice( const CvSeq* seq, CvSlice slice,
CvMemStorage*storage CV_DEFAULT(NULL),int copy_data CV_DEFAULT(0));//获取序列块,复制或者不复制序列元素
CV_INLINE CvSeq*cvCloneSeq( const CvSeq* seq, CvMemStorage* storage CV_DEFAULT(NULL))
{
return cvSeqSlice(seq, CV_WHOLE_SEQ, storage, 1 );
}
CVAPI(void) cvSeqRemoveSlice(CvSeq* seq, CvSlice slice );//移除序列块
CVAPI(void) cvSeqInsertSlice(CvSeq* seq, int before_index, constCvArr* from_arr );//将一个序列或者数组插入另一个序列
typedef int (CV_CDECL*CvCmpFunc)(const void* a, const void* b, void* userdata );
CVAPI(void)cvSeqSort( CvSeq* seq, CvCmpFunc func, void* userdata CV_DEFAULT(NULL));//对给定元素比较进行排序
CVAPI(schar*)cvSeqSearch( CvSeq* seq, const void* elem, CvCmpFunc func, int is_sorted, int*elem_idx, void*userdata CV_DEFAULT(NULL) );//查找在排序后序列中的元素
CVAPI(void)cvSeqInvert( CvSeq* seq );//对序列进行倒置
CVAPI(int) cvSeqPartition( const CvSeq*seq, CvMemStorage* storage,CvSeq** labels, CvCmpFunc is_equal, void*userdata );//用特定的标准将序列分成一个或多个等效类