图像的加法有两种,一种是通过运算符“+”对图像进行加法运算,也可以通过cv2.add()函数对图像进行加法运算。通常用一个8bit来表示,范围为[0,255]。两个像素值在相加时,求得的值很有可能超过255。下面介绍的两种方法对于超过255的数值处理方式不一样。

加号运算符

mod(a+b,256)表示“a+b的和除以256取余数”,例如255+58=313,大于255,那么计算(255+58)%256 = 57

例:使用随机数组模拟灰度图像,使用加号运算符对像素值进行结果求和。

分析:通过随机数值定义类型为dtype=np.unit8,可以保证数组的范围在[0,255]之间。

 import numpy as np
 img1 = np.random.randint(0, 256, size=[3, 3], dtype=np.uint8)
 img2 = np.random.randint(0, 256, size=[3, 3], dtype=np.uint8)
 print("img1 = ")
 print(img1)
 print("img2 = ")
 print(img2)
 print("img1 + img2 = ")
 print(img1+img2)

结果

img1 =
[[ 27 141 69]
[112 79 37]
[ 84 118 193]]
img2 =
[[ 11 247 147]
[ 44 201 231]
[ 3 96 221]]
img1 + img2 =
[[ 38 132 216]
[156 24 12]
[ 87 214 158]]

cv2.add()函数

使用cv2.add()进行运算,则有一下运算规则:
$$
\begin{align}
a+b & = \left\{\begin{matrix}
a+b,a+b\le255 \\
255,a+b>255
\end{matrix}\right.
\end{align}
$$
一般有三种情况

  • 形式1:result = cv2.add(图像1,图像2)两个参数都是图像,此时参与运算的图像大小和类型必须保持一致
  • 形式2: result = cv2.add(数值,图像),第一个参数是数值,第二个参数是图像,此时将超过图像饱和值的数值处理为饱和值
  • 形式3:result = cv2.add(图像,数值),第一个参数是图像,第二个参数是数值,此时将超过图像饱和值的数值处理为饱和值

例:分别使用加号运算符和函数cv2.add()计算两个灰度图的像素值之和,观察处理结果。

import cv2
a = cv2.imread('hongmao.jpg', 0)  # 读取灰度图
b = a
result1 = a+b
result2 = cv2.add(a, b)
cv2.imshow('+', result1)
cv2.imshow("cv2.add()", result2)
cv2.waitKey()

像素之和

图像的加权求和

所谓加权,就是将两个图片按照一定的比重进行考虑。

在Opencv中,有addWeighted()函数是将两张相同大小,相同类型的图片融合的函数。他可以实现图片的特效,不多说了,直接上图。

再强调一下,一定要两张图像的分辨率是一样的,否则会出错

dst = cv2.addWeighted(src1,alpha,src2,beta,gamma)

需要注意的是,gamma即便是0,也不能不写,这是一个必选参数。

可以理解为“结果图 = 图像1 X 系数1 + 图像2 X 系数2 + 亮度调节量”

例1: 使用数组演示cv2.addWeighted()的使用

import cv2
import numpy as np
img1 = np.ones((3, 4), dtype=np.uint8)*100  # 三行四列都是100的矩阵
img2 = np.ones((3, 4), dtype=np.uint8)*10  # 三行四列都是10的矩阵
gamma = 3
img3 = cv2.addWeighted(img1, 0.6, img2, 5, gamma)
print(img3)

结果

例2:对两张图片进行加权混合。

import cv2
import numpy as np
img1 = cv2.imread('xing600x350.jpg')
img2 = cv2.imread('ma600x350.jpg')
gamma = 3
img3 = cv2.addWeighted(img1, 0.6, img2, 0.5, gamma)
cv2.imshow("hunhe", img3)
cv2.waitKey()

效果:

图片混合效果


素材,照片都是600X350的,右击图片,选择另存为即可下载

星空

天马



博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2021/OpenCV7.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 05 月 24 日
如果觉得我的文章对你有用,请随意赞赏