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);