opencv知识库:cv2.add()函数和“+”号运算符

需求场景

现有一灰度图像,需求是为该图像增加亮度。

原始灰度图像

预期目标图像

解决方案

不建议的方案------"+"运算符

假设我们需要为原始灰度图像的亮度整体提升88,那么利用"+"运算符的源码如下:

python 复制代码
import cv2

img_path = r"D:\pycharmproject\python_project\lena.jpg"
img = cv2.imread(img_path, 0) # 以灰度图像格式读取图像
l_value = 88 # 欲增加的亮度值
img = img + l_value # 利用"+"运算符进行亮度增强操作
cv2.imshow('lena', img)
cv2.waitKey(0)

运行结果

从结果可以看出,某些区域的亮度比【增强亮度前】更低

原因分析

由于cv2.imread()函数读取图像的数据格式是无符号8位整数(uint8) ,所以其数值范围是[0,255]。当应用"+"号运算符为原图增强亮度时,"+"的运算逻辑如下:
a + b = { a + b , a + b ≤ 255 m o d ( a + b , 256 ) , a + b > 255 (1) a + b= \begin{cases} a+b,\quad a+b\leq 255\\ mod(a+b, 256), \quad a+b>255 \end{cases} \tag{1} a+b={a+b,a+b≤255mod(a+b,256),a+b>255(1)

即如果原图某个像素值a=200,而欲增强的亮度值为b=88,则"+"的运算结果并不是a + b = 288, 而是288 % 256 = 32(可以利用a的数据格式是uint8的信息协助理解)

建议的方案------cv2.add()方法

源码如下:

python 复制代码
import cv2

img_path = r"D:\pycharmproject\python_project\lena.jpg"
img = cv2.imread(img_path, 0) # 以灰度图像格式读取图像
l_value = 88 # 欲增加的亮度值
img = cv2.add(img, l_value) # 利用cv2.add()方法进行亮度增强操作
cv2.imshow('lena', img)
cv2.waitKey(0)

运行结果

从结果来看,没有出现某些区域的亮度比【增强亮度前】更低的现象。

结果分析

当应用cv2.add()方法为原图增强亮度时,其运算逻辑如下:
a + b = { a + b , a + b ≤ 255 255 , a + b > 255 (1) a + b= \begin{cases} a+b,\quad a+b\leq 255\\ 255, \quad a+b>255 \end{cases} \tag{1} a+b={a+b,a+b≤255255,a+b>255(1)

即如果原图某个像素值a=200,而欲增强的亮度值为b=88,则cv2.add()方法的运算结果并不是a + b = 288, 而是255(相加结果超过255,一律取255)。

小结

经过上述分析,当需要对一张图像进行亮度增强或者对两幅图像进行叠加操作时,相比于"+"运行符,cv2.add()方法是更为安全的方案。

相关推荐
桦说编程37 分钟前
Harness Engineering — AI 时代的工程最佳实践
人工智能·架构·代码规范
老纪的技术唠嗑局42 分钟前
Agent / Skills / Teams 架构演进流程及技术选型之道
人工智能·agent
该用户已不存在43 分钟前
除了OpenClaw还有谁?五款安全且高效的开源AI智能体
人工智能·aigc·ai编程
机器之心1 小时前
AI发布首个全球科学家社区爆火,硅谷投资圈:科技研究领域的「谷歌地图」来了!
人工智能·openai
ECH00O001 小时前
06-Attention/注意力机制:AI的"聚光灯"
人工智能
机器之心1 小时前
1美元Token撬动4800美元收益!AI挑战百万美元级基准,最赚钱的Agent出现了
人工智能·openai
ECH00O001 小时前
05-Transformer:AI界的"变形金刚"
人工智能
非优秀程序员1 小时前
推荐五个OPENclaw 可以应用的场景,让你明白他能干怎么
人工智能·架构·浏览器
孟祥_成都2 小时前
Cursor 要被淘汰了?开发者最应该关注的 10 个信号
前端·人工智能
非优秀程序员2 小时前
OpenClaw 2026 最新功能全解析:Gemini、PDF 原生到安全强化完整拆解
人工智能·开源·产品经理