opencv中矩阵的基本操作:拷贝,转换,改变尺寸,创建矩阵头,局部提取,反转,分解合并通道,其他一些数学相关的操作。
cv::Mat src,dst,m;
1)src.copyTo(dst)
把src矩阵中的数据拷贝到dst。
2)m.clone()
深度拷贝。
3)src.convertTo(dst, type, scale, shift)
缩放并转换到另外一种数据类型:
dst:目的矩阵
type:需要的输出矩阵类型,或者更明确的,是输出矩阵的深度,如果是负值(常用-1)则输出矩阵和输入矩阵类型相同
scale和shift:缩放参数,也可以写为alpha和beta
这个函数等价于下面的转换公式:m(x,y) = saturate_cast(α(*this)(x,y)+β)。
4)m.reshape(nch,nrows)
重设矩阵的通道数和行数,不拷贝数据。
nch:新的通道数,若为0则不变
nrows:新的行数,若为0则不变
5)m.row(i), m.col(i)
创建一个矩阵头,指向m矩阵的第i行/列,O(1)复杂度,不拷贝数据,新的矩阵头所代表的矩阵和m矩阵的第i行/列共享数据。
6)m.rowRange(Range(i1,i2))
m.colRange(Range(j1,j2))
创建一个矩阵头,指向m矩阵的第i1到i2行或者第j1到j2列,O(1)复杂度,不拷贝数据。
7)m.diag(i)
创建一个矩阵头,指向m矩阵的对角线,生成的是一个单列矩阵,O(1)复杂度,不拷贝数据。i=0时表示主对角线,i>0表示下半边的对角线,i<0表示上半边的对角线。
8)m(Range(i1,i2),Range(j1,j2))
从矩阵m中的第i1行到第i2行以及第j1列到第j2列所划定的范围提取一个小矩阵。
类似于画矩形框取区域:Mat image(Rect(10, 20, 100, 100));
9)m.repeat(ny,nx)
把m矩阵贴马赛克,获取一个大矩阵,在y方向上重复ny次,在x方向上重复nx次。
10)flip(src,dst,dir)
翻转矩阵,dir是翻转方向,0表示沿x轴翻转,1表示沿y轴翻转,-1表示沿x轴和y轴都进行翻转。
11)split(...)
把一个多通道矩阵分解为几个单通道矩阵,操作RGB图像之类的最常用。
12)merge(...)
和上面的操作相反。
mixChannels(...),上面两个函数的一般形式。
13)randShuffle(...)
把矩阵中的元素随机重排。
14)add(), subtract(), multiply(), divide(), absdiff(), bitwiseand(), bitwiseor(), bitwisexor(), max(), min(), compare()
分别是加减乘除、按位与或异或、最大最小之类的。
15)sum(), mean(), meanStdDev(), norm(), countNonZero(), minMaxLoc()
求和、均值、均值方差、矩阵范数、非零个数、最大最小值。
16)exp(), log(), pow(), sqrt(), cartToPolar(), polarToCart()
指数、对数、乘方、开放、极坐标转换。
17)scaleAdd(), transpose(), gemm(), invert(), solve(), determinant(), trace(), eigen(), SVD
线性组合、转置、广义矩阵乘法、矩阵求逆、解线性系统或最小二乘问题、计算行列式、矩阵的迹、计算对称矩阵的特征值和特征向量、奇异值分解。
18)dft(), idft(), dct(), idct()
离散傅立叶变换、离散余弦变换。