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

相关推荐
深海鱼在掘金1 分钟前
深入浅出 LangChain —— 第六章:记忆与状态管理
人工智能·langchain·agent
qq_283720054 分钟前
Python+LangChain 调用大模型全方案深度实战:原生调用、统一接口、流式输出、异步、自定义模型全解析
人工智能·langchain·agent·rag
葫三生4 分钟前
三生原理文章被AtomGit‌开源社区收录的意义探析?
人工智能·深度学习·神经网络·算法·搜索引擎·开源·transformer
冬奇Lab8 分钟前
一天一个开源项目(第90篇):cmux - 为 AI Agent 时代设计的原生终端复用器
人工智能·开源·资讯
Godspeed Zhao12 分钟前
具身智能中的传感器技术41——事件相机1
人工智能·科技·机器学习·具身智能·事件相机
Empty-Filled13 分钟前
Claude Gateway 排查教程
网络·数据库·人工智能
深海鱼在掘金13 分钟前
深入浅出 LangChain —— 第七章:Agent 架构深度解析与LangGraph 核心概念
人工智能·langchain·agent
暗夜猎手-大魔王13 分钟前
转载--AI Agent 架构设计:单 Agent vs 多 Agent(OpenClaw、Claude Code、Hermes Agent 对比)
人工智能
changshuaihua00115 分钟前
扣子开发指南
javascript·人工智能
xinxiangwangzhi_15 分钟前
立体匹配--Fast-FoundationStereo
计算机视觉