-在图像处理过程中,经常需要对图像进行加法运算。可以通过加号运算符“+”对图像进 行加法运算,也可以通过 cv2.add()函数对图像进行加法运算。
-通常情况下,在灰度图像中,像素用 8 个比特位(一个字节)来表示,像素值的范围是[0,255]。 两个像素值在进行加法运算时,求得的和很可能超过 255。上述两种不同的加法运算方式,对 超过 255 的数值的处理方式是不一样的。
1.加法运算符
【例 3.1】使用随机数数组模拟灰度图像,观察使用“+”对像素值求和的结果。
import numpy as np
img1 = np.random.randint(0,256,size=[3,3],dtype=np.uint8) #?加法要进行取模,这是由数组的类型 dtype=np.uint8 所规定的
img2 = np.random.randint(0,256,size=[3,3],dtype=np.uint8)
print("img1=\n",img1)
print("img2=\n",img2)
print("img1+img2=",img1+img2)
2. cv2.add()函数
函数 cv2.add()可以用来计算图像像素值相加的和,其语法格式为:
计算结果=cv2.add(像素值 a,像素值 b)
使用函数 cv2.add()对像素值 a 和像素值 b 进行求和运算时,会得到像素值对应图像的饱和 值(最大值)。
- 如果两个像素值的和小于或等于 255,则直接相加得到运算结果。例如,像素值 28 和 像素值 36 相加,得到计算结果 64。
- 如果两个像素值的和大于 255,则将运算结果处理为饱和值 255。例如 255+58=313,大 于 255,则得到计算结果 255。
需要注意,函数 cv2.add()中的参数可能有如下三种形式。 - 形式 1:计算结果=cv2.add(图像 1,图像 2),两个参数都是图像,此时参与运算的图像大小和类型必须保持一致
- 形式 2:计算结果=cv2.add(数值,图像),第 1 个参数是数值,第 2 个参数是图像,此时将超过图像饱和值的数值处理为饱和值(最大值)。
- 形式 3:计算结果=cv2.add(图像,数值),第 1 个参数是图像,第 2 个参数是数值,此时将超过图像饱和值的数值处理为饱和值(最大值)。
【例 3.2】使用随机数组模拟灰度图像,观察函数 cv2.add()对像素值求和的结果。
import cv2
img1 = np.random.randint(0,256,size=[3,3],dtype=np.uint8) #?加法要进行取模,这是由数组的类型 dtype=np.uint8 所规定的
img2 = np.random.randint(0,256,size=[3,3],dtype=np.uint8)
print("img1=\n",img1)
print("img2=\n",img2)
img3=cv2.add(img1,img2)
print("cv2.add(img1,img2)=\n",img3)
【例 3.3】分别使用加号运算符和函数 cv2.add()计算两幅灰度图像的像素值之和,观察处理 结果。
a = cv2.imread("/Users/zhaofeier/Desktop/lena.bmp",0)
b = a
result1 = a + b
result2 = cv2.add(a,b)
cv2.imshow("original",a)
cv2.imshow("result1",result1)
cv2.imshow("result2",result2)
cv2.waitKey()
cv2.destroyAllWindows()
- 使用加号运算符计算图像像素值的和时,将和大于 255 的值进行了取模处理,取模后大 于 255 的这部分值变得更小了,导致本来应该更亮的像素点变得更暗了,相加所得的图 像看起来并不自然。
- 使用函数 cv2.add()计算图像像素值的和时,将和大于 255 的值处理为饱和值 255。图像 像素值相加后让图像的像素值增大了,图像整体变亮。
4090

被折叠的 条评论
为什么被折叠?



