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

需求场景

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

原始灰度图像

在这里插入图片描述

预期目标图像

在这里插入图片描述

解决方案

不建议的方案——“+”运算符

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

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

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

源码如下:

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

小结

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

结束语

如果本博文对你有所帮助,可以点个赞/收藏支持一下,如果能够持续关注,小编感激不尽~
小编会坚持创作,持续优化博文质量,以小见大,给读者带来更好de阅读体验~

相关推荐

  1. PostgreSQL函数运算符

    2023-12-07 19:32:04       14 阅读
  2. cv2.error: OpenCV(4.7.0)

    2023-12-07 19:32:04       39 阅读
  3. 逻辑运算符——and&的区别

    2023-12-07 19:32:04       35 阅读
  4. opencv-python库 cv2逐帧读取视频cv2.VideoCapture()

    2023-12-07 19:32:04       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 19:32:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 19:32:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 19:32:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 19:32:04       20 阅读

热门阅读

  1. Python批量图像处理--图片重命名、图片旋转

    2023-12-07 19:32:04       40 阅读
  2. CG 函数

    2023-12-07 19:32:04       40 阅读
  3. 解决分布式React前端在本地开发环境的跨域问题

    2023-12-07 19:32:04       38 阅读
  4. 关于业界大语言模型(LLM)开源的一些看法

    2023-12-07 19:32:04       33 阅读
  5. 供应链产品经理常用的ChatGPT通用提示词模板

    2023-12-07 19:32:04       37 阅读
  6. MyBatis

    MyBatis

    2023-12-07 19:32:04      41 阅读
  7. 冒泡排序详解

    2023-12-07 19:32:04       42 阅读
  8. 【ASP.NET CORE】EntityFrameworkCore 数据迁移

    2023-12-07 19:32:04       39 阅读
  9. 如何在Go中构建For循环

    2023-12-07 19:32:04       39 阅读
  10. Flutter: Websocket的使用与封装

    2023-12-07 19:32:04       39 阅读
  11. EsayExcel的使用

    2023-12-07 19:32:04       48 阅读