到现在我们了解一些算法背后的矩阵运算,本人便整理了opencv中矩阵运算的函数
<1>位运算
PS:需要两个二值化的矩阵进行运算。
与:bitwise_and(Mat InputArray1,Mat InputArray2,Mat outputArray);
或:bitwise_or(Mat InputArray1,Mat InputArray2,Mat outputArray);
非:bitwise_not(Mat InputArray,Mat outputArray);
异或:bitwise_xor(Mat InputArray1,Mat InputArray2,Mat outputArray);
<2>矩阵运算
相加:add(src1,src2,dst,mask,dtype=-1)//dst=src1+src2,mask和dtype不需要管
addweighted(src1,alpha,src2,beta,gamma,dst,int dtype = -1)//dst=src1*alpha+src2*beta+gamma
scaleadd(src1,alpha,src2,dst);//dst=src1*alpha+src2
PS:cv::convertScaleAbs()用于实现对整个图像数组中的每一个元素,进行如下操作:
操作可实现图像增强等相关操作的快速运算,具体用法如下:
void cv::convertScaleAbs(
cv::InputArray src, // 输入数组
cv::OutputArray dst, // 输出数组
double alpha = 1.0, // 乘数因子
double beta = 0.0 // 偏移量
);
相减:absdiff(src1,src2,dst);//dst=|src1-src2|;
subtract(src1,,src2,dst);//dst=src1-src2;
相乘:
multiply(src1,src2,dst,scale,dtype=-1);//dst=scale*src1*src2
src1.mul(src2)//dst=src1.*src2
相除:
divide(src1,src2,dst,scale,dtype=-1);//dst=scale*src1/src2
点乘:
double value = src1.dot(src2)//value = src1a11*src2b11+src1a12*src2b12+……+src1a1n*src2b1n
叉乘:
Mat dst = src1.cross(src2)
开方:
sqrt(src,dst);//
幂:
pow(src,power,dst);//
指数:
exp(src,dst);//;
对数:
log(src,dst);//