07_OpenCv之矩阵的加法运算

07_OpenCv之矩阵的加法运算

一.矩阵的加法

矩阵的加法是指两个矩阵对于位置的数值相加,对于矩阵的加法,以如下两个矩阵为例:
s r c 1 = [ 23 123 90 100 250 0 ] src1= \left[ \begin{matrix} 23 & 123 & 90\\ 100 & 250 & 0 \end{matrix} \right]

s r c 2 = [ 125 150 60 100 10 40 ] src2= \left[ \begin{matrix} 125 & 150 & 60\\ 100 & 10 & 40 \end{matrix} \right]

二.使用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]
发布了79 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/gzx110304/article/details/90050514