opencv中的矩阵操作_第1页
opencv中的矩阵操作_第2页
opencv中的矩阵操作_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

opencv中的矩阵操作 分类: Computer Vision2012-03-23 09:49659人阅读评论(1)收藏举报 dstnullsystemeach 有很多函数有 mask,代表掩码,如果某位 mask 是 0,那么对应的 src 的那一位就不计算,mask 要和矩 阵/ROI/ 的大小相等 大多数函数支持 ROI,如果图像 ROI 被设置,那么只处理 ROI 部分 少部分函数支持 COI,如果 COI 设置,只处理感兴趣的通道 矩阵逻辑运算 void cvAnd(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL);/ void cvAndS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL);/ void cvOr(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL);/ void cvOrS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL);/ void cvXor(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL);/ void cvXorS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL);/ void cvNot(const CvArr* src,CvArr* dst);/矩阵取反 矩阵算术运算 绝对值 void cvAbs(const CvArr* src,CvArr* dst); void cvAbsDiff(const CvArr* src1,const CvArr* src2, CvArr* dst);/两矩阵相减取绝对值 void cvAbsDiffS(const CvArr* src, CvArr* dst,CvScalar value);/矩阵减去一个数取绝对值 加减 void cvAdd(const CvArr* src1,const CvArr* src2,CvArr* dst,const CvArr* mask = NULL);/两数组相 加,dst(I)=src1(I)+src2(I) if mask(I)!=0 void cvAddS(const CvArr* src,CvScalar value,CvArr*dst,const CvArr* mask = NULL);/数组和一个 数相加,dst(I)=src(I)+value if mask(I)!=0 void cvAddWeighted(const CvArr* src1,double alpha,const CvArr* src2,double beta,double gamma,CvArradded to each sum* dst);/带权相加相当于 dst(x,y) = ? src1(x,y) + ? src2(x,y) + void cvSub(const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL);/矩阵减法, dst(I)=src1(I)-src2(I) if mask(I)!=0 void cvSubS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL);/矩阵减数, dst(I)=src(I)-value if mask(I)!=0 void cvSubRS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL);/数减矩阵, dst(I)=value-src(I) if mask(I)!=0 乘除 void cvDiv(const CvArr* src1, const CvArr* src2, CvArr* dst, double scale=1);/scale*src1(i)/src2(i), 如果 src1=NULL,则计算 scale/src2(i) void cvMul(const CvArr* src1,const CvArr* src2,CvArr* dst,double scale=1);/两矩阵元素之间的简 单乘法,一般的矩阵点乘用 cvGEMM(); 次方 void cvPow(const CvArr* src, CvArr* dst, double power);/为每个 src 的数求 power 次方 指数 void cvExp(const CvArr* src, CvArr* dst);/dst(I)=EXP(src(I) 对数 void cvLog(const CvArr* src, CvArr* dst);/ 线性代数计算 加/src1 和 scale 的乘积加上 src2 void cvCrossProduct(const CvArr* src1,const CvArr* src2,CvArr* dst);/计算两个 3D 向量(单通道) 的叉乘运算 double cvDotProduct(const CvArr* src1, const CvArr* src2);/两个向量点乘 void cvGEMM(const CvArr* src1, const CvArr* src2, double alpha, const CvArr* src3, double beta, CvArr* dst, int tABC=0);/乘加运算的始祖 由通用乘加函数参与定义的两个具体宏 cvMatMul(const CvArr* src1,const CvArr* src2,CvArr* dst); cvMatMulAdd(const CvArr* src1,const CvArr* src2,const CvArr* src3,CvArr* dst); CvScalar cvTrace(const CvArr* mat);/计算对角线上的元素和 变换 void cvTransform(const CvArr* src, CvArr* dst, const CvMat* transmat, const CvMat* shiftvec=NULL);/dst=transmat src + shiftvec void cvPerspectiveTransform(const CvArr* src, CvArr* dst, const CvMat* mat);/把矩阵每个元素中 三个通道当做一个矩阵,乘 mat,mat 是一个 33 或者 44 的转换矩阵 转置 void cvTranspose(const CvArr* src, CvArr* dst); void cvMulTransposed(const CvArr* src, CvArr* dst, int order, const CvArr* delta=NULL, double scale=1.0);/(src-delta)乘以它的转置再乘以 scale 逆矩阵 double cvInvert(const CvArr* src,CvArr* dst,int method=CV_LU);/求原矩阵的逆矩阵,默认使用高 斯消去法 方阵可逆的充要条件是|A|!=0 method 取值为 CV_LU 高斯消去法(默认) CV_SVD 奇异值分解 SVD CV_SVD_SYM 对称矩阵的 SVD 行列式 double cvDet(const CvArr* mat);/计算方阵行列式,一定是单通道的 小型方阵直接计算,大型方阵用高斯消去法计算 如果矩阵正定对称,用奇异值分解的方法解决 cvSVD(); 特征向量特征值 void cvEigenVV(CvArr* mat, CvArr* evects, CvArr* evals, double eps=0);/计算对称矩阵的特征值和 特征向量,evects 输出特征向量,evals 输出特征值,eps 雅可比方法停止参数 要求三个矩阵都是浮点类型,1010 以下该方法有效,2020 以上的矩阵不能计算出结果,为节约计算 量,eps 通常设为 DBL_EPSILON(10-15) 如果给定的矩阵是对称正定矩阵,那么考虑使用 cvSVD(); 协方差 void cvCalcCovarMatrix(const CvArr* vects, int count, CvArr* cov_mat, CvArr* avg, int flags);/给 定一组大小和类型相同的向量,向量的个数,计算标记,输出协方差正阵和每个向量的平均值矩阵 CV_COVAR_NORMAL 普通计算协方差和平均值,输出的是 nn 的协方差阵 CV_COVAR_SCRAMBLED 快速 PCA“Scrambled”协方差,输出的是 mm 的协方差阵 CV_COVAR_USE_AVERAGE 平均值是输入的 CV_COVAR_SCALE 重新缩放输出的协方差矩阵 四个 flag 通过并运算协同发挥作用,前两个不能并 CvSize cvMahalonobis(const CvArr* vec1,const CvArr* vec2,CvArr* mat); int cvSolve(const CvArr* src1, const CvArr* src2, CvArr* dst, int method=CV_LU);/Solves a linear system or least-squares problem. void cvSVD(CvArr* A, CvArr* W, CvArr* U=NULL, CvArr* V=NULL, int flags=0);/Performs singular value decomposition of a real floating-point matrix. void cvSVBkSb(const CvArr* W, const CvArr* U, const CvArr* V, const CvArr* B, CvArr* X, int flags);/Performs singular value back substitution. 数组比较 void cvCmp(const CvArr* src1, const CvArr* src2, CvArr* dst, int cmp_op);/两矩阵比较运算 CV_CMP_EQ - src1(I) 是否相等 CV_CMP_GT - src1(I) 是否大于 CV_CMP_GE - src1(I) 是否大于等于 CV_CMP_LT - src1(I) 是否小于 CV_CMP_LE - src1(I) 是否小于等于 CV_CMP_NE - src1(I) 是否不等 如果判断为假,dst 设为 0,如果判断为真,dst 设为 0xff void cvCmpS(const CvArr* src, double value, CvArr* dst, int cmp_op);/矩阵和一个数字比较运算 矩阵内转换 类型转换 void cvConvertScale(const CvArr* src,CvArr* dst,double scale,double shift);/矩阵首先乘以 scale 再加上 shift,然后把 src 中的数据类型转换成 dst 类型,但是 src 和 dst 通道数需要相等 void cvConvertScaleAbs(const CvArr* src,CvArr* dst,double scale,double shift);/在 src 到 dst 类型 转换前,先做绝对值 void cvCvtColor(const CvArr* src,CvArr* dst, int code);/图像 颜色空间转换,src 要为 8U 16U 32F,dst 的数据类型需要和 src 相同,通道数看 code code 格式如:CV_原色彩空间 2 目的色彩空间 色彩空

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论