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()方法是更为安全的方案。

相关推荐
信马堂3 小时前
WorkBuddy 接入第三方模型 API 全流程:安装与配置实录
人工智能·大模型·token·ai算力·workbuddy
朝朝辞暮i5 小时前
VLA 系统学习第 4 课:一个 Batch 进入神经网络后,模型到底是怎么“学会”的?
人工智能·python·神经网络·vla
IT古董5 小时前
《FDE前沿部署工程师实战教程》33 - Enterprise AI Observability:从Agent Trace到全链路智能运维
数据库·人工智能
xsd202411185 小时前
地网腐蚀AI识别算法全解析:从锈蚀图像到地下腐蚀快速定位
人工智能
oooost5 小时前
pytorch学习笔记2(transformer)
人工智能·机器学习
云杂项6 小时前
Exploring Model Inversion Attacks in the Black-box Setting(个人笔记)
人工智能
还卿一钵无情泪6 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth
冬奇Lab7 小时前
LLM 驱动的自动化测试系列(06):移动端自动化(二)——DroidRun/Mobilerun 的角色级模型拆分
人工智能·测试
冬奇Lab7 小时前
一天一个开源项目(第230篇):HandRaw-Style —— 把 327 种手绘风格、165 种排版、36 种配色编号化,让 AI 画图不再每次都飘
人工智能·开源·资讯
罗西的思考7 小时前
从陶哲轩的访谈看:AI 数学研究方法论 & 给其它行业的启示
人工智能