Opencv 2.4 手册速查表(二)

来源:互联网 发布:vscode 放弃所有更改 编辑:程序博客网 时间:2024/06/01 10:31

3矩阵操作

src.copyTo(dst);//src复制到dst中

src.converTo(dst,type,scale,shift);//类型转换

m.clone();//深度复制一个矩阵

m.reshape(nch,nrows);//改变矩阵的维数,或(且)通道数,不进行数据复制,仅仅是改变矩阵的结构,属于浅复制

m.row(i),m.col(i); //提取矩阵的某行/列

m.rowRange(Range(i1,i2));//提取矩阵行/列范围

m.colRange(Range(j1,j2));

m.diag(i);//提取矩阵的对角点上的第i个值

m(Range(i1,i2),Range(j1,j2));//提取子矩阵

m(roi)

m.repeate(ny,nx);//将小矩阵组成一个大矩阵

flip(src,dst,dir)翻转行/列的矩阵的顺序

split(...);//将多通道矩阵分离为单独的通道

merge();将多个单独通道的矩阵融合会一个矩阵

mixChannels(..) ;//split()和merge()的泛型形式

randShuffle(...)//随机混合矩阵元素

例子1:光滑图像ROI

Mat imageroi=image(Rect(10,20,100,100));

GaussianBlur)imageroi,imageroi,Size(5,5),1.2,1.2);

例子2:矩阵的线性操作

m.row(i)+=m.row(j)*alpha;

例子3: 图像的ROI复制到另一个图像

Rect r(1,1,10,20);

Mat dstroi=dst(Rect(0,10,r.width,r.height));

src(r).convertTo(dstroi,dstroi.type(),1,0);


简单矩阵操作

add(),subtract(),multiply(),divide(),absdiff(),bitwise_and(),bitwise_or(),bitwise_xor(),max(),min(),compare();//可用于matrix和scalar

例子:

void alphaCompose(const Mat & rgba1,const Mat & rgba2, Mat &rgba_dest)

{

Mat a1(rgba1.size(),rgb1.type()),ra1;

Mat a2(rgba2.size(),rgba2.type));

int mixch[]={3,0,3,1,3,2,3,3};

mixChannels(&rgba1,1,&a1,1,mixch,4);

mixChannels(&rgba2,1,&a2,1,mixch,4);

subtract(Scalar::all(255),al,ra1);

bitwise_or(a1,Scalar(0,0,0,255),a1);

bitwise_or(a2,Scalar(0,0,0,255),a2);

multiply(a2,ra1,a2,1./255);

multiply(a1,rgba1,a1,1./255);

multiply(a2,rgba2,a2,1./255);

add(a1,a2,rgba_dest);

}

各种矩阵元素的统计

sum(),mean(),meanStdDev(),norm(),countNonZero(),minMaxLoc();

经典的数学函数

exp(),log(),pow(),sqrt(),cartToPolar(),polarToCart();

代数函数与SVD类

scaleAdd(),transpose(),gemm(),invert(),solve(),determinat(),trace(),elgen(),SVD

离散傅里叶与余弦变换

dft(),idft(),dct(),idct();

例子:

代数运算

 Mat delta=(J.t()*J+lambda*Mat::eye(J.cols,J.cols,J.type())).inv(CV_SVD)*(J.t()*err);


0 0