OpenCV的图像加法运算

1.基本介绍

  opencv中的图像加法运算就是将两幅图像或一幅图像与一个标量(标量即单一的数值)进行相加

  对于两幅的图像相加,要求相加的图像的大小应该相同,在处理时应该将两幅图像相同位置的像素的灰度值(灰度图像)或彩色像素各通道值(彩色图像)分别相加。

  对于一幅图像和一个标量相加的情况,则应该将图像所有像素的各通道值分别与标量进行相加。

  目前主要有两种用途,一种是用于减少甚至消除图像采集中混入的噪声,原理是图像各点的采集噪声互不相关且噪声具有零均值的统计特性,因此可以对图像进行多次采集形成多幅图像,然后将这多幅图像相加再取平均值,就可以实现噪点的消除;另一种是用来做特效,把多幅图像叠加在一起后做进一步的处理。

  在OpenCV中可以通过加号运算符“+” 对图像进行加法运算,或者通过 cv2.add()函数对图像进行加法运算。通常情况下,在灰度图像中,像素用 8 个比特位(一个字节)来表示,像素值的范围是[0,255]。两个像素值在进行加法运算时,求得的和很可能超过 255。

2.加号“+”运算符

使用加号运算符“+”对图像 a和 b进行求和运算时,遵循如下规则:

当a+b小于等于255时,a+b=a+b;
当a+b大于255时,a+b=mod(a+b,256);
其中mod(a+b, 256)表示计算a+b的和除以 256 取余数;

上述规则也可以简化为a+b= mod(a+b, 256),在运算时无论相加的和是否大于255,都对数值 256 取模

3.cv2.add()函数

使用cv2.add() 函数对进行加法操作时,会将超过图像饱和值的数值处理为饱和值(最大值)。

函数 cv2.add()可以用来计算图像像素值相加的和,其语法格式为:
add(src1, src2, dst=None, mask=None, dtype=None)

参数说明:
src1,src2: 相加的两幅大小和通道数相等的图像或一副图像和一个标量(标量即单一的数值)

dst:可选参数,为输出结果保存的变量,默认值为None。如果为非None,输出图像保存到dst对应实参中,其大小和通道数与输入图像相同,图像的深度(即图像像素的位数)由dtype参数或输入图像确认

mask: 可选参数,图像掩膜,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0

dtype: 可选参数,输出图像数组的深度,即图像单个像素值的位数(如RGB用三个字节表示,则为24位)

4.图像加法运算案例

import cv2
lena_1=cv2.imread("Lena_gray.jpg")
lena_2=lena_1
result1=lena_1+lena_2
result2=cv2.add(lena_1,lena_2)
cv2.imshow("原图",lena_1)
cv2.imshow("使用加号“+”运算符相加",result1)
cv2.imshow("使用cv2.add()函数相加",result2)
cv2.waitKey()
cv2.destroyAllWindows()

程序运行结果

在这里插入图片描述


原图:lena灰度图像
在这里插入图片描述
使用加号“+”运算符相加: 在计算图像像素值的和时,将和大于 255 的值进行了取模处理,取模后大于 255 的部分值变得更小了,导致本该更亮的像素点变暗了,相加所得的图像看起来并不自然。

在这里插入图片描述
使用cv2.add()函数相加: 计算图像像素值的和时,将和大于 255 的值处理为饱和值 255。图像像素值相加后让图像的像素值增大了,图像整体变亮。

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值