需求场景

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

原始灰度图像

在这里插入图片描述

预期目标图像

在这里插入图片描述

解决方案

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

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

import cv2

img_path = r"D:pycharmprojectpython_projectlena.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+bleq 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:pycharmprojectpython_projectlena.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+bleq 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阅读体验~

原文地址:https://blog.csdn.net/qq_41813454/article/details/134702238

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38688.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注