07_OpenCv之矩阵的加法运算
一.矩阵的加法
矩阵的加法是指两个矩阵对于位置的数值相加,对于矩阵的加法,以如下两个矩阵为例:
二.使用OpenCv重载的"+"运算符,假设两个矩阵都为uchar类型,则:
Mat src1 = (Mat_<uchar>(2,3) << 23, 123, 90, 100, 250, 0);
Mat src2 = (Mat_<uchar>(2,3) << 125, 150, 60, 100, 10, 40);
Mat dst = src1 + src2;
打印dst的结果如下:
148, 255, 150
200, 255, 40
可以看到123+150应该等于273, 因为两个矩阵的类型都是uchar, 所以"+“运算计算出来的和也是uchar类型, 但是uchar类型范围的最大值是255, 所以273被限制为了255。
利用”+“运算符计算计算Mat的和需注意:两个Mat的数据类型必须是一样的, 否则会报错。
一个数值与一个Mat对象相加, 也可以使用”+"运算符, 但是无论这个数值是什么数据类型, 返回的Mat的数据类型都与输入的Mat相同:
float value = 100.0;
Mat dst1 = src1 + value;
打印dst1的值如下:
123, 223, 190
200, 255, 100
三.使用add函数
void add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1);
将src1与src2两个矩阵使用add函数相加:
Mat src1 = (Mat_<uchar>(2,3) << 23, 123, 90, 100, 250, 0);
Mat src2 = (Mat_<uchar>(2,3) << 125, 150, 60, 100, 10, 40);
Mat dst;
add(src1, src2, dst, Mat(), CV_64FC1);
打印dst的值如下:
148, 273, 150
200, 260, 40
使用add函数时, 输入矩阵的数据类型可以不同, 二输出矩阵的数据类型可以根据情况自行指定, 只有当src1和src2的数据类型相同时, 才能令dtype = -1, 否则仍然会报错。
四.两个向量之间也可以做加法运算, 如:
Vec3f v1 = Vec3f(1, 2, 3);
Vec3f v2 = Vec3f(10, 1, 12);
Vec3f v = v1 + v2;
cout << v << endl;
打印结果为:
[11, 3, 15]