一、矩阵运算
1.基本运算
序号 | 函数 | 说明 |
---|---|---|
1 | void add(InputArray src1, InputArray src2, OutputArray dst,InputArray mask = noArray(), int dtype = -1) | 矩阵加法,A+B的更高级形式,支持mask |
2 | void subtract(InputArray src1, InputArray src2, OutputArray dst,InputArray mask = noArray(), int dtype = -1) | 矩阵减法,A-B的更高级形式,支持mask |
3 | void multiply(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1) | 矩阵逐元素乘法,同Mat::mul()函数,与A*B区别,支持mask |
4 | void divide(InputArray src1, InputArray src2, OutputArray dst,double scale = 1, int dtype = -1) | 矩阵逐元素除法,与A/B区别,支持mask |
2.逻辑运算
序号 | 函数 | 说明 |
---|---|---|
1 | void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray()) | 矩阵src1与矩阵src2逐元素进行和位运算 |
2 | void bitwise_not(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray()) | 矩阵src1与矩阵src2逐元素进行非位运算 |
3 | void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray()) | 矩阵src1与矩阵src2逐元素进行或位运算 |
4 | void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray()) | 矩阵src1与矩阵src2逐元素进行异或位运算 |
3.比较运算
序号 | 函数 | 说明 |
---|---|---|
1 | void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop) | 矩阵逐元素比较大小,比较操作子cmpop可选 CMP_EQ 或 CMP_GT 或 CMP_GE 或 CMP_LT 或 CMP_LE 或 CMP_NE |
2 | MatExpr min(const Mat& a, const Mat& b) | 返回矩阵a和矩阵b对应位置上的最小值 |
3 | MatExpr max(const Mat& a, const Mat& b) | 返回矩阵a和矩阵b对应位置上的最大值 |
4.其它运算
序号 | 函数 | 说明 |
---|---|---|
1 | MatExpr abs(const Mat& m) | 矩阵逐元素求绝对值 |
2 | void absdiff(InputArray src1, InputArray src2, OutputArray dst) | 两个矩阵的差的绝对值 |
3 | void sqrt(InputArray src, OutputArray dst) | 矩阵逐元素计算元素值的平方根 |
4 | void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, InputArray mask=noArray()) | 矩阵的元素求均值和标准差 |
5 | Scalar sum(InputArray src) | 矩阵的元素求和,返回向量的第一个元素为所有元素之和 |
6 | Scalar mean(InputArray src, InputArray mask = noArray()) | 矩阵的元素求均值,返回向量的第一个元素为所有元素的平均值 |
7 | void exp(InputArray src, OutputArray dst) | 矩阵逐元素计算 e ^ x ,x为元素值 |
8 | pow(InputArray src, double power, OutputArray dst) | 矩阵逐元素计算元素值的power次幂 |
9 | void log(InputArray src, OutputArray dst) | 矩阵逐元素计算元素值绝对值的自然对数(以常数e为底数的对数) |
10 | int countNonZero( InputArray src ) | 统计矩阵中的非零值个数 |
11 | void minMaxLoc(InputArray src, CV_OUT double* minVal,CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0, CV_OUT Point* maxLoc = 0, InputArray mask = noArray()) | 获取矩阵最小值、最大值,并定位对应的索引值 |
二、线性代数与方程式
1.线性代数
序号 | 函数 | 说明 |
---|---|---|
1 | void transpose(InputArray src, OutputArray dst) | 矩阵转置 |
2 | Scalar trace(InputArray mtx) | 矩阵的迹 |
3 | double determinant(InputArray mtx) | 矩阵的行列式 |
4 | bool eigen(InputArray src, OutputArray eigenvalues,OutputArray eigenvectors = noArray()) | 矩阵的特征值和特征向量 |
5 | double invert(InputArray src, OutputArray dst, int flags = DECOMP_LU) | 矩阵的逆或者伪逆 |
6 | void mulTransposed( InputArray src, OutputArray dst, bool aTa,InputArray delta = noArray(),double scale = 1, int dtype = -1 ) | 矩阵和它自己的转置相乘,aTa用于指定乘法顺序 |
7 | void calcCovarMatrix( InputArray samples, OutputArray covar,InputOutputArray mean, int flags, int ctype = CV_64F) | 计算协方差阵。samples表示输入的向量集,它们可以是若干个同样形式的向量组成,也可以是一个矩阵的若干行组成;nsamples表示输入的向量的数目;covar表示输出的协方差矩阵;mean: 输出的均值矩阵 |
2.方程式
序号 | 函数 | 说明 |
---|---|---|
1 | int solveCubic(InputArray coeffs, OutputArray roots) | 求解三次方程的根。coeffs表示方程系数,是一个3或4个元素的数组;roots表示输出具有1或3个元素的实根的数组 |
2 | double solvePoly(InputArray coeffs, OutputArray roots, int maxIters = 300) | 求解多项式的实根和重根。maxIters 表示算法执行的最大迭代次数 |
三、图像变换
1.基本变换
序号 | 函数 | 说明 |
---|---|---|
1 | void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype = -1) | 矩阵转向量。dim表示矩阵被简化后的维数索引(0意味着矩阵被处理成一行,1意味着矩阵被处理成为一列,-1意味着维数将根据输出向量的大小自动选择);rtype表示简化操作的方式(REDUCE_SUM或REDUCE_AVG或REDUCE_MAX或REDUCE_MIN),即输出是矩阵的所有行/列的和/均值/最大值/最小值 |
2 | void repeat(InputArray src, int ny, int nx, OutputArray dst) | 拷贝矩阵,并在x/y方向重复nx/ny次 |
3 | void split(InputArray m, OutputArrayOfArrays mv) | 多通道矩阵分解成多个单通道矩阵 |
4 | void merge(InputArrayOfArrays mv, OutputArray dst) | 多个单通道矩阵合成一个多通道矩阵 |
5 | void flip(InputArray src, OutputArray dst, int flipCode) | 矩阵翻转。flipCode可选:0 垂直方向翻转; 1 水平方向翻转; -1 水平、垂直方向同时翻转 |
6 | double norm(InputArray src1, int normType = NORM_L2, InputArray mask = noArray()) | 求范数,1-范数、2-范数、无穷范数 |
2.频率域变换
序号 | 函数 | 说明 |
---|---|---|
1 | void dct(InputArray src, OutputArray dst, int flags = 0) | 正离散余弦变换 |
2 | void idct(InputArray src, OutputArray dst, int flags = 0) | 逆离散余弦变换 |
3 | void dft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0) | 正离散傅立叶变换,idct等同dct(src, dst, flags |
4 | void idft(InputArray src, OutputArray dst, int flags = 0, int nonzeroRows = 0) | 逆离散傅立叶变换,idft等同dft(src, dst, flags |
5 | void mulSpectrums(InputArray a, InputArray b, OutputArray c, int flags, bool conjB = false) | 两个傅立叶频谱间逐元素的乘法 |
3.幅值与相位
序号 | 函数 | 说明 |
---|---|---|
1 | void magnitude(InputArray x, InputArray y, OutputArray magnitude) | 计算矢量的幅值。x表示矢量的浮点型X坐标值,也就是实部;y表示矢量的浮点型Y坐标值,也就是虚部 |
2 | void phase(InputArray x, InputArray y, OutputArray angle,bool angleInDegrees = false) | 相位计算,即两个向量之间的夹角 |
4.查表变换
序号 | 函数 | 说明 |
---|---|---|
1 | void LUT(InputArray src, InputArray lut, OutputArray dst) | 查表变换 |