博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV矩阵运算总结
阅读量:5059 次
发布时间:2019-06-12

本文共 13274 字,大约阅读时间需要 44 分钟。

篇一:OpenCV矩阵运算总结

原文地址:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:cvvision链接:http://www.cvvision.cn/273.html来源:CV视觉网一、矩阵Mat I,img,I1,I2,dst,A,B;double k,alpha;Scalar s;1.加法I=I1+I2;//等同add(I1,I2,I);add(I1,I2,dst,mask,dtype);scaleAdd(I1,scale,I2,dst);//dst=scale*I1+I2;2.减法absdiff(I1,I2,I);//I=|I1-I2|;A-B;A-s;s-A;-A;subtract(I1,I2,dst);3.乘法I=I.mul(I);//点乘,I.mul(I,3);–>I=3*I.^2Mat C=A.mul(5/B);//==divide(A,B,C,5);A*B;矩阵相乘I=alpha*I;Mat::cross(Mat);//三维向量(或矩阵)的叉乘,A.cross(B)double Mat::dot(Mat);//2个向量(或矩阵)的点乘的结果,A.dot(B)mul——-multiplypow(src,double p,dst);//如果p是整数dst(I)=src(I)^p;其他|src(I)|^p4.除法divide(I1,I2,dst,scale,int dtype=-1);//dst=saturate_cast(I1*scale/I2);A/B;alpha/A;都是点除5.转换I.convertTo(I1,CV_32F);//类型转换A.t();//转置flip(I,dst,int flipCode);//flipCode=0是上下翻转,>0时左右翻转,<0时一起来sqrt(I,dst);cvtColor(I,dst,int code,int dstCn=0);resize:对图像进行形变————————————————————————–6.其他Scalar s=sum(I);各通道求和norm,countNonZero,trace,determinant,repeat都是返回Mat或者ScalarcountNonZero:用来统计非零的向量个数.(rows*cols个)Scalar m=mean(I);//各通道求平均Mat RowClone=C.row(1).clone();//复制第2行addWeight(I1,alpha,I2,beta,gamma,dst,int dtype=-1);//dst=saturate(alpha*I1+beta*I2+gamma);dtype是dst的深度—————————————————————————-7.运算符log10()exp(I,dst);//dst=exp(I);计算每个数组元素的指数log(I,dst);//如果Iij!=0;则dstij=log(|Iij|)randu(I,Scalar::all(0),Scalar::all(255));Mat::t()转置Mat::inv(int method=DECOMP_LU)求逆。method=DECOMP_CHOLESKY(专门用于对称,速度是LU的2倍),DECOMP_SVD//A.inv();A.inv()*B;invert(I1,dst,int method=DECOMP_LU);//用法同上MatExpr abs(Mat)//求绝对值A cmpop B;A compop alpha;alpha cmpop A;这里cmpop表示>,>=,==,!=,<=,
<等,结果是cv_8uc1的mask的0或255按位运算:a logicop b;a s;s a;~a;这里logicop代表&,|,^bitwise_not(i,dst,mask); inverts所有的队列还有bitwise_and,bitwise_or,bitwise_xor,min(a,b);min(a,alpha);max(a,b);max(a,alpha);都返回matexpr,返回的dst和a的类型一样double determinant(mat); 行列式bool eigen(i1,dst,int lowindex="-1,int" highindex="-1);//bool" eigen(i1,dst,i,int…); 得到特征值向量dst和对应特征值的特征向量minmaxloc(i1,&minval,&maxval,point *minloc="0,Point*" maxloc="0,mask);//minLoc是2D时距原点最小的点(未考证)——————————————————————————8.初始化Mat" i(img,rect(10,10,100,100)); 用一块地方初始化。mat i="[0,0,255,0,0,255;0,0,255,0,0,255];Mat" i(2,2,cv_8uc3,scalar(0,0,255)); e="Mat::eye(4,4,CV_64F);//对角矩阵Mat" o="Mat::ones(2,2,CV_32F);//全一矩阵Mat" z="Mat::zeros(3,3,CV_8UC1);//全零矩阵Mat" c="(Mat_
(2,2)<<0,-1,2,3);//如果是简单矩阵的初始化Mat::row(i);Mat::row(j);Mat::rowRange(start,end);Mat::colRange(start,end);都只是创建个头Mat::diag(int d);d=0是是主对角线,d=1是比主低的对角线,d=-1….static Mat Mat::diag(const Mat& matD)Mat::setTo(Scalar &s);以s初始化矩阵Mat::push_back(Mat);在原来的Mat的最后一行后再加几行Mat::pop_back(size_t nelems=1);//移出最下面几行——————————————————————————-9.矩阵读取和修改(1)1个通道:for(int i=0;i
(i,j)=k;(2)3个通道:Mat_
_I=I;//他没有4个通道寸,只有3个通道!for(int i=0;i
(i,j)[0]….————————————————-float *s;for(i=0;i
(i);for(j=0;j
(…);//可以确保内容为0~255的整数Mat::total();返回一共的元素数量size_t Mat::elemSize();返回元素的大小:CV_16SC3–>3*sizeof(short)–>6size_t Mat::elemSize1();返回元素一个通道的大小CV_16SC3–>sizeof(short)–>2int Mat::type()返回他的类型CV_16SC3之类int Mat::depth()返回深度:CV_16SC3–>CV_16Sint Mat::channels()返回通道数size_t Mat:step1()返回一个被elemSize1()除以过的stepSize Mat::size()返回Size(cols,rows);如果大于2维,则返回(-1,-1),都是先宽再高的bool Mat::empty()如果没有元素返回1,即Mat::total()==0或者Mat::data==NULLuchar *Mat::ptr(int i=0)指向第i行Mat::at(int i)(int i,int j)(Point pt)(int i,int j,int k)RNG随机类:next,float RNG::uniform(float a,float b);..double RNG::gaussian(double sigma);RNG::fill(I,int distType,Mat low,Mat up);//用随机数填充randu(I,low,high);randn(I,Mat mean,Mat stddev);reduce(I,dst,int dim,int reduceOp,int dtype=-1);//可以统计每行或每列的最大、最小、平均值、和setIdentity(dst,Scalar &value=Scalar(1));//把对角线替换为value//效果等同:Mat A=Mat::eye(4,3,CV_32F)*5;————————————————————–10.较复杂运算gemm(I1,I2,alpha,I3,beta,dst,int flags=0);//I1至少是浮点型,I2同I1,flags用来转置//gemm(I1,I2,alpha,I3,beta,dst,GEMM_1_T,GEMM_3_T);–>dst=alpha*I1.t()*I2+beta*I3.t();可用此完全代替此函数mulTransposed(I,dst,bool aTa,Mat delta=noArray(),double scale=1,int rtype=-1);//I是1通道的,和gemm不同,他可用于任何类型。//如果aTa=flase时,dst=scale*(I-delta).t()*(I-delta);//如果是true,dst=scale*(I-delta)(I-delta).t();calcCovarMatrix(Mat,int,Mat,Mat,int,int=);calcCovarMatrix(Mat I,Mat covar,Mat mean,int flags,int=);cartToPolar//转到极坐标compare(I1,I2,dst,cmpop);cmpop=CMP_EQ,CMP_GT,CMP_GE,CMP_LT,CMP_LE,COM_NEcompleteSymm(M,bool lowerToUpper=false);当lowerToUpper=true时Mij=Mji(i
j)变成可显示图像:convertScaleAbs(I,dst,alpha,beta);dst=saturate_cast
(|alpha*I+beta|);dct(I,dst,int flags=0);//DCT变换,1维、2维的矩阵;flags=DCT_INVERSE,DCT_ROWSidct,dft,idftinRange(I1,I_low,I_up,dst);//dst是CV_8UC1,在2者之间就是255Mahalanobis(vec1,vec2,covar);merge(vector
,Mat);//把多个Mat组合成一个和split相反double norm(…):当src2木有时,norm可以计算出最长向量、向量距离和、向量距离和的算术平方根solveCubic解3次方程,solvePoly解n次方程排列:sort,sortIdxmixChannels();对某个通道进行各种传递—————————————————————–11.未懂的函数getConvertElem,extractImageCOI,LUTmagnitude(x,y,dst);//I1,I2都是1维向量,dst=sqrt(x(I)^2+y(I)^2);meanStdDev,MulSpectrums(I1,I2,dst,flags);傅里叶normalize(I,dst,alpha,beta,int normType=NORM_L2,int rtype=-1,mask);//归一化PCA,SVD,solve,transform,transpose二、其他数据结构Point2f P(5,1);Point3f P3f(2,6,7);vector
v;v.push_back((float)CV_PI);v.push_back(2);v.push_back(3.01f);//不断入vector
vPoints(20);//一次定义20个三、常用方法Mat mask=src<0;这样很快建立一个mask了四、以后可能用到的函数randShuffle,repeat五、矩阵处理1、矩阵的内存分配与释放(1) 总体上:Opencv 使用C语言来进行矩阵操作。不过实际上有很多C++语言的替代方案可以更高效地完成。在OpenCV中向量被当做是有一个维数为1的N维矩阵.矩阵按行-行方式存储,每行以4字节(32位)对齐.(2) 为新矩阵分配内存:CvMat* cvCreateMat(int rows, int cols, int type);type: 矩阵元素类型.按CV_
(S|U|F)C
方式指定. 例如: CV_8UC1 、CV_32SC2.示例:CvMat* M = cvCreateMat(4,4,CV_32FC1);(3) 释放矩阵内存:CvMat* M = cvCreateMat(4,4,CV_32FC1);cvReleaseMat(&M);(4) 复制矩阵:CvMat* M1 = cvCreateMat(4,4,CV_32FC1);CvMat* M2;M2=cvCloneMat(M1);(5) 初始化矩阵:double a[] = { 1, 2, 3, 4,5, 6, 7, 8,9, 10, 11, 12 };CvMat Ma=cvMat(3, 4, CV_64FC1, a);//等价于:CvMat Ma;cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a);(6) 初始化矩阵为单位矩阵:CvMat* M = cvCreateMat(4,4,CV_32FC1);cvSetIdentity(M); // does not seem to be working properl2、访问矩阵元素(1) 假设需要访问一个2D浮点型矩阵的第(i, j)个单元.(2) 间接访问:cvmSet(M,i,j,2.0); // Set M(i,j)t = cvmGet(M,i,j); // Get M(i,j)(3) 直接访问(假设矩阵数据按4字节行对齐):CvMat* M = cvCreateMat(4,4,CV_32FC1);int n = M->cols;float *data = M->data.fl;data[i*n+j] = 3.0;(4) 直接访问(当数据的行对齐可能存在间隙时 possible alignment gaps):CvMat* M = cvCreateMat(4,4,CV_32FC1);int step = M->step/sizeof(float);float *data = M->data.fl;(data+i*step)[j] = 3.0;(5) 对于初始化后的矩阵进行直接访问:double a[16];CvMat Ma = cvMat(3, 4, CV_64FC1, a);a[i*4+j] = 2.0; // Ma(i,j)=2.0;3、矩阵/向量运算(1) 矩阵之间的运算:CvMat *Ma, *Mb, *Mc;cvAdd(Ma, Mb, Mc); // Ma+Mb -> MccvSub(Ma, Mb, Mc); // Ma-Mb -> MccvMatMul(Ma, Mb, Mc); // Ma*Mb -> Mc(2) 矩阵之间的元素级运算:CvMat *Ma, *Mb, *Mc;cvMul(Ma, Mb, Mc); // Ma.*Mb -> MccvDiv(Ma, Mb, Mc); // Ma./Mb -> MccvAddS(Ma, cvScalar(-10.0), Mc); // Ma.-10 -> Mc(3) 向量乘积:double va[] = {1, 2, 3};double vb[] = {0, 0, 1};double vc[3];CvMat Va=cvMat(3, 1, CV_64FC1, va);CvMat Vb=cvMat(3, 1, CV_64FC1, vb);CvMat Vc=cvMat(3, 1, CV_64FC1, vc);double res=cvDotProduct(&Va,&Vb); // 向量点乘: Va . Vb -> rescvCrossProduct(&Va, &Vb, &Vc); // 向量叉乘: Va x Vb -> Vc注意在进行叉乘运算时,Va, Vb, Vc 必须是仅有3个元素的向量.(4) 单一矩阵的运算:CvMat *Ma, *Mb;cvTranspose(Ma, Mb); // 转置:transpose(Ma) -> Mb (注意转置阵不能返回给Ma本身)CvScalar t = cvTrace(Ma); // 迹:trace(Ma) -> t.val[0]double d = cvDet(Ma); // 行列式:det(Ma) -> dcvInvert(Ma, Mb); // 逆矩阵:inv(Ma) -> Mb(5) 非齐次线性方程求解:CvMat* A = cvCreateMat(3,3,CV_32FC1);CvMat* x = cvCreateMat(3,1,CV_32FC1);CvMat* b = cvCreateMat(3,1,CV_32FC1);cvSolve(&A, &b, &x); // solve (Ax=b) for x(6) 特征值与特征向量 (矩阵为方阵):CvMat* A = cvCreateMat(3,3,CV_32FC1);CvMat* E = cvCreateMat(3,3,CV_32FC1);CvMat* l = cvCreateMat(3,1,CV_32FC1);cvEigenVV(A, E, l); // l = A 的特征值(递减顺序)// E = 对应的特征向量 (行向量)(7) 奇异值分解(SVD):====CvMat* A = cvCreateMat(3,3,CV_32FC1);CvMat* U = cvCreateMat(3,3,CV_32FC1);CvMat* D = cvCreateMat(3,3,CV_32FC1);CvMat* V = cvCreateMat(3,3,CV_32FC1);cvSVD(A, D, U, V, CV_SVD_U_T|CV_SVD_V_T); // A = U D V^T标志位使矩阵U或V按转置形式返回 (若不转置可能运算出错).

篇二:OpenCV的基本矩阵操作与示例

OpenCV中的矩阵操作非常重要,本文总结了矩阵的创建、初始化以及基本矩阵操作,给出了示例代码,主要内容包括:

  • 创建与初始化
  • 矩阵加减法
  • 矩阵乘法
  • 矩阵转置
  • 矩阵求逆
  • 矩阵非零元素个数
  • 矩阵均值与标准差
  • 矩阵全局极值及位置
  • 其他矩阵运算函数列表

1. 创建与初始化矩阵

1.1 数据类型

建立矩阵必须要指定矩阵存储的数据类型,图像处理中常用的几种数据类型如下:

[cpp]  
  1. CV_8UC1// 8位无符号单通道  
  2. CV_8UC3// 8位无符号3通道  
  3. CV_8UC4  
  4. CV_32FC1// 32位浮点型单通道  
  5. CV_32FC3// 32位浮点型3通道  
  6. CV_32FC4  

包括数据位深度8位、32位,数据类型U:uchar、F:float型以及通道数C1:单通道、C3:三通道、C4:四通道。

1.2 基本方法

我们可以通过载入图像来创建Mat类型矩阵,当然也可以直接手动创建矩阵,基本方法是指定矩阵尺寸和数据类型:

[cpp]  
  1. // 基本方法  
  2.     cv::Mat a(cv::Size(5,5),CV_8UC1); // 单通道  
  3.     cv::Mat b = cv::Mat(cv::Size(5,5),CV_8UC3); //3通道每个矩阵元素包含3个uchar值  
  4.     cout<<"a  = "<<endl<<a<<endl<<endl;  
  5.     cout<<"b  = "<<endl<<b<<endl<<endl;  
  6.     system("pause");  

运行结果:

3通道矩阵中,一个矩阵元素包含3个变量。

1.3 初始化方法

上述方法不初始化矩阵数据,因此将出现随机值。如果想避免这种情况,可使用Mat类的几种初始化创建矩阵的方法:

[cpp]  
  1. // 初始化方法  
  2.     cv::Mat mz = cv::Mat::zeros(cv::Size(5,5),CV_8UC1); // 全零矩阵  
  3.     cv::Mat mo = cv::Mat::ones(cv::Size(5,5),CV_8UC1);  // 全1矩阵  
  4.     cv::Mat me = cv::Mat::eye(cv::Size(5,5),CV_32FC1);  // 对角线为1的对角矩阵  
  5.     cout<<"mz = "<<endl<<mz<<endl<<endl;  
  6.     cout<<"mo = "<<endl<<mo<<endl<<endl;  
  7.     cout<<"me = "<<endl<<me<<endl<<endl;  
运行结果:

2. 矩阵运算

2.1 基本概念

 OpenCV的Mat类允许所有的矩阵运算。

2.2 矩阵加减法

我们可以使用"+"和"-"符号进行矩阵加减运算。
[cpp]  
  1. cv::Mat a= Mat::eye(Size(3,2), CV_32F);  
  2. cv::Mat b= Mat::ones(Size(3,2), CV_32F);  
  3. cv::Mat c= a+b;  
  4. cv::Mat d= a-b;  

2.3 矩阵乘法

使用"*"号计算矩阵与标量相乘,矩阵与矩阵相乘(必须满足矩阵相乘的行列数对应规则)

[cpp]  
  1. Mat m1= Mat::eye(2,3, CV_32F); //使用cv命名空间可省略cv::前缀,下同  
  2. Mat m2= Mat::ones(3,2, CV_32F);  
  3. cout<<"m1  = "<<endl<<m1<<endl<<endl;  
  4. cout<<"m2  = "<<endl<<m2<<endl<<endl;  
  5. // Scalar by matrix  
  6. cout << "\nm1.*2 = \n" << m1*2 << endl;  
  7. // matrix per element multiplication  
  8. cout << "\n(m1+2).*(m1+3) = \n" << (m1+1).mul(m1+3) << endl;  
  9. // Matrix multiplication  
  10. cout << "\nm1*m2 = \n" << m1*m2 << endl;  

2.4 矩阵转置

矩阵转置是将矩阵的行与列顺序对调(第i行转变为第i列)形成一个新的矩阵。OpenCV通过Mat类的t()函数实现。
[cpp]  
  1. // 转置  
  2.     Mat m1= Mat::eye(2,3, CV_32F);    
  3.     Mat m1t = m1.t();  
  4.     cout<<"m1  = "<<endl<<m1<<endl<<endl;  
  5.     cout<<"m1t  = "<<endl<<m1t<<endl<<endl;  
  6.     system("pause");  
运行结果:

2.5 求逆矩阵

逆矩阵在某些算法中经常出现,在OpenCV中通过Mat类的inv()方法实现
[cpp]  
  1. // 求逆  
  2.     Mat meinv = me.inv();  
  3.     cout<<"me  = "<<endl<<me<<endl<<endl;  
  4.     cout<<"meinv = "<<endl<<meinv<<endl<<endl;  
  5.     system("pause");  
运行结果:

单位矩阵的逆就是其本身。

2.6 计算矩阵非零元素个数

计算物体的像素或面积常需要用到计算矩阵中的非零元素个数,OpenCV中使用countNonZero()函数实现。

[cpp]  
  1. // 非零元素个数  
  2.     int nonZerosNum = countNonZero(me); // me为输入矩阵或图像  
  3.     cout<<"me  = "<<endl<<me<<endl;  
  4.     cout<<"me中非零元素个数 = "<<nonZerosNum<<endl<<endl;  
  5.     system("pause");  
运行结果:

2.7 均值和标准差

OpenCV提供了矩阵均值和标准差计算功能,可以使用meanStdDev(src,mean,stddev)函数实现。

参数

  • src – 输入矩阵或图像
  • mean – 均值,OutputArray
  • stddev – 标准差,OutputArray

[cpp]  
  1. // 均值方差  
  2.     Mat mean;  
  3.     Mat stddev;  
  4.     meanStdDev(me, mean, stddev); //me为前文定义的5×5对角阵  
  5.     cout<<"mean = "<<mean<<endl;  
  6.     cout<<"stddev = "<<stddev<<endl;  
  7.     system("pause");  

运行结果:

需要说明的是,如果src是多通道图像或多维矩阵,则函数分别计算不同通道的均值与标准差,因此返回值mean和stddev为对应维度的向量。

[cpp]  
  1. Mat mean3;  
  2. Mat stddev3;  
  3. Mat m3(cv::Size(5,5),CV_8UC3,Scalar(255,200,100));  
  4. cout<<"m3  = "<<endl<<m3<<endl<<endl;  
  5. meanStdDev(m3, mean3, stddev3);  
  6. cout<<"mean3 = "<<mean3<<endl;  
  7. cout<<"stddev3 = "<<stddev3<<endl;  
  8. system("pause");  

多通道矩阵运算结果:

2.8 求最大最小值

求输入矩阵的全局最大最小值及其位置,可使用函数:

[cpp]  
  1. void minMaxLoc(InputArray src, CV_OUT double* minVal,  
  2.                            CV_OUT double* maxVal=0, CV_OUT Point* minLoc=0,  
  3.                            CV_OUT Point* maxLoc=0, InputArray mask=noArray());  

参数:

  • src – 输入单通道矩阵(图像).
  • minVal – 指向最小值的指针, 如果未指定则使用NULL
  • maxVal – 指向最大值的指针, 如果未指定则使用NULL
  • minLoc – 指向最小值位置(2维情况)的指针, 如果未指定则使用NULL
  • maxLoc – 指向最大值位置(2维情况)的指针, 如果未指定则使用NULL
  • mask – 可选的蒙版,用于选择待处理子区域

[cpp]  
  1. // 求极值 最大、最小值及其位置  
  2.     Mat img = imread("Lena.jpg",0);  
  3.     imshow("original image",img);  
  4.   
  5.     double minVal=0,maxVal=0;  
  6.     cv::Point minPt, maxPt;  
  7.     minMaxLoc(img,&minVal,&maxVal,&minPt,&maxPt);  
  8.     cout<<"min value  = "<<minVal<<endl;  
  9.     cout<<"max value  = "<<maxVal<<endl;  
  10.     cout<<"minPt = ("<<minPt.x<<","<<minPt.y<<")"<<endl;  
  11.     cout<<"maxPt = ("<<maxPt.x<<","<<maxPt.y<<")"<<endl;  
  12.     cout<<endl;  
  13.   
  14.     cv::Rect rectMin(minPt.x-10,minPt.y-10,20,20);  
  15.     cv::Rect rectMax(maxPt.x-10,maxPt.y-10,20,20);  
  16.   
  17.     cv::rectangle(img,rectMin,cv::Scalar(200),2);  
  18.     cv::rectangle(img,rectMax,cv::Scalar(255),2);  
  19.   
  20.     imshow("image with min max location",img);  
  21.     cv::waitKey();  
运行结果:
输入图像及其最大最小值位置

3. 其他矩阵运算

其他矩阵运算函数见下表:

Function (函数名)

Use (函数用处)

add

矩阵加法,A+B的更高级形式,支持mask

scaleAdd

矩阵加法,一个带有缩放因子dst(I) = scale * src1(I) + src2(I)

addWeighted

矩阵加法,两个带有缩放因子dst(I) = saturate(src1(I) * alpha + src2(I) * beta + gamma)

subtract

矩阵减法,A-B的更高级形式,支持mask

multiply

矩阵逐元素乘法,同Mat::mul()函数,与A*B区别,支持mask

gemm

一个广义的矩阵乘法操作

divide

矩阵逐元素除法,与A/B区别,支持mask

abs

对每个元素求绝对值

absdiff

两个矩阵的差的绝对值

exp

求每个矩阵元素 src(I) 的自然数 e 的 src(I) 次幂 dst[I] = esrc(I)

pow

求每个矩阵元素 src(I) 的 p 次幂 dst[I] = src(I)p

log

求每个矩阵元素的自然数底 dst[I] = log|src(I)| (if src != 0)

sqrt

求每个矩阵元素的平方根

min, max

求每个元素的最小值或最大值返回这个矩阵 dst(I) = min(src1(I), src2(I)), max同

minMaxLoc

定位矩阵中最小值、最大值的位置

compare

返回逐个元素比较结果的矩阵

bitwise_and, bitwise_not, bitwise_or, bitwise_xor

每个元素进行位运算,分别是和、非、或、异或

cvarrToMat

旧版数据CvMat,IplImage,CvMatND转换到新版数据Mat

extractImageCOI

从旧版数据中提取指定的通道矩阵给新版数据Mat

randu

以Uniform分布产生随机数填充矩阵,同 RNG::fill(mat, RNG::UNIFORM)

randn

以Normal分布产生随机数填充矩阵,同 RNG::fill(mat, RNG::NORMAL)

randShuffle

随机打乱一个一维向量的元素顺序

theRNG()

返回一个默认构造的RNG类的对象

 theRNG()::fill(...)

reduce

矩阵缩成向量

repeat

矩阵拷贝的时候指定按x/y方向重复

split

多通道矩阵分解成多个单通道矩阵

merge

多个单通道矩阵合成一个多通道矩阵

mixChannels

矩阵间通道拷贝,如Rgba[]到Rgb[]和Alpha[]

sort, sortIdx

为矩阵的每行或每列元素排序

setIdentity

设置单元矩阵

completeSymm

矩阵上下三角拷贝

inRange

检查元素的取值范围是否在另两个矩阵的元素取值之间,返回验证矩阵

checkRange

检查矩阵的每个元素的取值是否在最小值与最大值之间,返回验证结果bool

sum

求矩阵的元素和

mean

求均值

meanStdDev

均值和标准差

countNonZero

统计非零值个数

cartToPolar, polarToCart

笛卡尔坐标与极坐标之间的转换

flip

矩阵翻转

transpose

矩阵转置,比较 Mat::t() AT

trace

矩阵的迹

determinant

行列式 |A|, det(A)

eigen

矩阵的特征值和特征向量

invert

矩阵的逆或者伪逆,比较 Mat::inv()

magnitude

向量长度计算 dst(I) = sqrt(x(I)2 + y(I)2)

Mahalanobis

Mahalanobis距离计算

phase

相位计算,即两个向量之间的夹角

norm

求范数,1-范数、2-范数、无穷范数

normalize

标准化

mulTransposed

矩阵和它自己的转置相乘 AT * A, dst = scale(src - delta)T(src - delta)

convertScaleAbs

先缩放元素再取绝对值,最后转换格式为8bit型

calcCovarMatrix

计算协方差阵

solve

求解1个或多个线性系统或者求解最小平方问题(least-squares problem)

solveCubic

求解三次方程的根

solvePoly

求解多项式的实根和重根

dct, idct

正、逆离散余弦变换,idct同dct(src, dst, flags | DCT_INVERSE)

dft, idft

正、逆离散傅立叶变换, idft同dft(src, dst, flags | DTF_INVERSE)

LUT

查表变换

getOptimalDFTSize

返回一个优化过的DFT大小

mulSpecturms

两个傅立叶频谱间逐元素的乘法

上表引自:http://blog.sina.com.cn/s/blog_7908e1290101i97z.html

转载请注明出处(本文更新链接)

转载于:https://www.cnblogs.com/siahekai/p/11000789.html

你可能感兴趣的文章
hdu 4502
查看>>
Nginx优化
查看>>
js数组复制
查看>>
CoreMontion加速计
查看>>
【php】PDO
查看>>
Find the longest route with the smallest starting point
查看>>
hashMap的源码实现
查看>>
jquery selector 2
查看>>
NSIS API 函数常用备份
查看>>
STL之list(双向链表)
查看>>
朴素贝叶斯应用:垃圾邮件分类
查看>>
php中的常用数组函数(七) 数组合并 array_merge()和array_merge_recursive()
查看>>
《DSP using MATLAB》 Problem 4.9
查看>>
extern "c"
查看>>
利用CSS3-boxshadow绘制“蒙娜丽莎的微笑”
查看>>
scanf()函数
查看>>
USACO4.1.2--Fence Loops
查看>>
MyBatis 一级缓存和二级缓存及ehcache整合
查看>>
未来计算机发展趋势
查看>>
list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库
查看>>