目录 要说这加减乘除,大家肯定不陌生,从小学学数学开始,我们就接触了这四个基本的四则运算。那图像的加减乘除又是什么呢?它能实现什么样的效果呢?让我们走进今天的文章,来学习一下吧! 我们从加说起: 加实现了计算两个数组或一个数组和一个scalar的每个元素的和的功能。 输入数组和输出数组都可以具有相同或不同的深度。例如,可以将16位无符号数组添加到8位有符号数组,并将总和存储为32位浮点数组。输出数组的深度由dtype参数确定。在上面的第二和第三种情况下,以及在第一种情况下,当两个输入图像的深度相同时,可以将dtype设置为默认值-1。这时候,输出图像和输入图像的深入相同。 加的API如下: 具体的参数如下: (1)InputArray类型的src1 ,第一个输入数组或scalar。 (2)InputArray类型的src2 ,第二个输入数组或scalar。 (3)OutputArray类型的dst ,输出图像,图像的尺寸、通道数和输入图像相同。 (4)InputArray类型的mask,可选操作掩码-8位单通道数组,指定要更改的输出数组元素。 (5)int类型的dtype,输出数组的可选深度。 我们使用两个图像来做一下实战。 得到的结果如下,左边的两幅图是原图,后面的图是利用前两幅图加得到的。 我想大家应该还记得我们之前讲到的图像混合,如果我们使用图像混合得到的结果是什么样的呢? 讲完加,自然就应该说一下减: 减实现了计算两个数组或一个数组和一个scalar的每个元素的差的功能。 减法和加法只是加减运算不同,其他都是一样的。让我们走进API看一下吧 减的API如下: 具体的参数如下: (1)InputArray类型的src1 ,第一个输入数组或scalar。 (2)InputArray类型的src2 ,第二个输入数组或scalar。 (3)OutputArray类型的dst ,输出图像,图像的尺寸、通道数和输入图像相同。 (4)InputArray类型的mask,可选操作掩码-8位单通道数组,指定要更改的输出数组元素。 (5)int类型的dtype,输出数组的可选深度。 我们使用两个图像来做一下实战。 得到的结果如下,左边的两幅图是原图,后面的图是利用前两幅图加得到的。 因为后面的图片是被减的,所以在最终图像上,会取反(255减原值)。 第三个要说明的是乘: 乘实现了计算两个数组的按元素缩放的乘积的功能。 两个数组相乘,对应位置上的元素相乘,得到该位置上的值。 乘的API如下: 具体的参数如下: (1)InputArray类型的src1 ,第一个输入数组或scalar。 (2)InputArray类型的src2 ,第二个输入数组或scalar,尺寸和类型要与src1一致。 (3)OutputArray类型的dst ,输出图像,尺寸和类型要与src1一致。 (4)double类型的scale,可选比例因子。 (5)int类型的dtype,输出数组的可选深度。 我们使用两个图像来做一下实战。 得到的结果如下,左边的两幅图是原图,后面的图是利用前两幅图加得到的。 大家能够发现,我们使用了一个较小的比例因子,这是因为图像中最大的像素为255,而一幅图像中很常见像素值比较大,相乘就会超过255,最后导致整个图像就是几乎全白的,没有太大研究的意义,所以我们要添加一个比例因子,让其按比例缩放,就能看到更加真实的效果了。 最后要讲的就是除: 除实现了计算执行两个数组或标量按数组的每个元素的除法的功能。 在除中,要考虑的问题如下: 首先,除法可能是一个float数据和Mat的除,这个时候,计算的是float和Mat中每个数值的除;如果是两个Mat除,那就是对应位置做除法。 其次,除数Mat中可能会存在0,这个位置求出的值直接取零。 根据上面第一点,我们就能知道,有两种计算情况,那在实现中,会有两个除函数。 除的API如下: 具体的参数如下: (1)InputArray类型的src1 ,第一个输入数组或scalar。 (2)InputArray类型的src2 ,第二个输入数组或scalar,尺寸和类型要与src1一致。 (3)OutputArray类型的dst ,输出图像,尺寸和类型要与src1一致。 (4)double类型的scale,scalar因子。 (5)int类型的dtype,输出数组的可选深度。 我们使用两个图像来做一下实战。 得到的结果如下: 如果我们有一幅图像,我们先做掩膜操作,然后计算原图像与其掩膜图像的加减乘除,看一下效果吧! 得到的结果如下。
前言
一、加
1、介绍
2、API
void add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1 );
3、代码实战
Mat ZWJ = imread("./image/YT_ZWJ1.png"); Mat ZM = imread("./image/YT_ZM1.png"); if (!ZWJ.data && !ZM.data) { cout << "ERROR : could not load image.n"; return -1; } imshow("张无忌", ZWJ); imshow("赵敏", ZM); Mat YT_new; add(ZWJ, ZM, YT_new); imshow("倚天屠龙记-add", YT_new);
二、减
1、介绍
2、API
void subtract(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1 );
3、代码实战
Mat ZWJ = imread("./image/YT_ZWJ1.png"); Mat ZM = imread("./image/YT_ZM1.png"); if (!ZWJ.data && !ZM.data) { cout << "ERROR : could not load image.n"; return -1; } imshow("张无忌", ZWJ); imshow("赵敏", ZM); Mat YT_new; subtract(ZWJ, ZM, YT_new); imshow("倚天屠龙记-subtract", YT_new);
三、乘
1、介绍
2、API
void multiply(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1 );
3、代码实战
Mat ZWJ = imread("./image/YT_ZWJ1.png"); Mat ZM = imread("./image/YT_ZM1.png"); if (!ZWJ.data && !ZM.data) { cout << "ERROR : could not load image.n"; return -1; } imshow("张无忌", ZWJ); imshow("赵敏", ZM); Mat YT_new; multiply(ZWJ, ZM, YT_new, 0.05); imshow("倚天屠龙记-multiply", YT_new);
四、除
1、介绍
2、API
void divide(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1 ); void divide(double scale, InputArray src2, OutputArray dst, int dtype = -1 );
3、代码实战
Mat ZWJ = imread("./image/YT_ZWJ1.png"); Mat ZM = imread("./image/YT_ZM1.png"); if (!ZWJ.data && !ZM.data) { cout << "ERROR : could not load image.n"; return -1; } imshow("张无忌", ZWJ); imshow("赵敏", ZM); Mat YT_new; divide(ZWJ, ZM, YT_new,100); imshow("倚天屠龙记-divide", YT_new); divide(10000, ZWJ, YT_new); imshow("张无忌-divide", YT_new); divide(10000, ZM, YT_new); imshow("赵敏-divide", YT_new);
五、原图与掩膜图像的加减乘除
Mat YT = imread("./image/YiTian1.jpg"); if (!YT.data) { cout << "ERROR : could not load image.n"; return -1; } imshow("倚天屠龙记", YT); Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); Mat YT_mask; filter2D(YT, YT_mask, YT.depth(), kernel); imshow("倚天屠龙记-mask", YT_mask); Mat YT_new; add(YT, YT_mask, YT_new); imshow("倚天屠龙记-add", YT_new); subtract(YT, YT_mask, YT_new); imshow("倚天屠龙记-subtract", YT_new); multiply(YT, YT_mask, YT_new, 0.01); imshow("倚天屠龙记-multiply", YT_new); divide(YT, YT_mask, YT_new, 100); imshow("倚天屠龙记-divide", YT_new);
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算