opencv2.2.0源代码(include文件)分析(3)--中部分

匹配操作

 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 );//用特定的标准将序列分成一个或多个等效类

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值