openCV入门之矩阵的运算

矩阵的运算

加法

1.mat加法

  • 重载‘+’方法(mat+mat)
    直接Mat m = mat1 + mat2;
    注:
    1. 两边类型需相同
    2. 若值超出范围,则截断为最大值
      例:uchar类型最大为255 ,结果123+145=268>255 则结果直接为255
  • 重载‘+’方法(mat+value)
    直接 Mat mat = mat1+value;
    value可以是任意类型的值,返回的mat的类型与mat1相同
  • add(mat1,mat2,dst, Mat(),CV_64FC1);
    注:
    1. mat1,mat2的类型可以不相同,得出的dst的类型可自己设定
    2. 若mat1与mat2类型相同,才可以设定dtype=-1

2.ndarray加法

  • ‘+’方法
    mat = mat1+mat2
    注:
    1. mat1与mat2的类型可以不相同,返回的为数据范围大的类型
    2. 若超出了范围,采用取模最大范围后-1的方法
      例:uchar类型 123+145=268 268%255=13 13-1=12 所以最后结果为12。

减法

1. mat

与加法类似,为最小范围截断
与add方法相对的为subtract()

2. ndarray

与加法类似,超出范围的取余255后+1
例:123-233=-110
取余得 (255-110)%255+1=146

点乘

原理

必须都是m*n矩阵,每个位置相同的数相乘。

Mat的点乘

  1. Mat mat = mat1.mul(mat2);
  • 注:
    1. 类型必须相同
    2. 输出类型不变
    3. multiply(mat1,mat2,dst,scale,dtype)
      mat1,mat2两个初始矩阵,dst为输出的矩阵,scale为输出矩阵乘以的系数,dtype可以规定输出矩阵的类型
  • 注:
    1. 还是超出范围截断处理
    2. 类型可不相同

ndarray点乘

  1. '’ dst=mat1mat2
  2. dst=np.multiply(mat1,mat2) 类型可不相同,注意返回矩阵的类型即可

点除

原理

同点乘,不过换成了除法。

Mat点除

  1. ‘/’ Mat dst = mat1/mat2;
    注: 若分母为0则返回结果为0
    2.divide函数的使用

ndarray点除

  1. ‘/’ dst=map1/map2
    注:若分母为0,如果两个ndarray都是uint8类型的,则返回值为0,否则返回inf

乘法运算(矩阵乘法)

原理:

就是矩阵的乘法,要求必须一矩阵行数等于另一的列数
openCV入门之矩阵的运算_第1张图片

即行乘列21+11=3 22+10=4 41+31=7 42+30=8 得到结果矩阵

你可能感兴趣的:(opencv)