加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python,OpenCV:增加图像亮度而不会溢出UINT8数组

发布时间:2020-12-20 12:33:18 所属栏目:Python 来源:网络整理
导读:我正在尝试增加灰度图像的亮度. cv2.imread()返回一个numpy数组.我正在为数组的每个元素添加整数值.从理论上讲,这会增加每一个.之后,我可以将上限阈值设为255,并获得更高亮度的图像. 这是代码: grey = cv2.imread(path+file,0)print type(grey)print grey[0
我正在尝试增加灰度图像的亮度. cv2.imread()返回一个numpy数组.我正在为数组的每个元素添加整数值.从理论上讲,这会增加每一个.之后,我可以将上限阈值设为255,并获得更高亮度的图像.

这是代码:

grey = cv2.imread(path+file,0)

print type(grey)

print grey[0]

new = grey + value

print new[0]

res = np.hstack((grey,new))

cv2.imshow('image',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

但是,内部OpenCV例程显然是这样的:

new_array = old_array % 255

高于255的每个像素强度值变为除以255的余数.

结果,我变得黑暗而不是完全变白.

这是输出:

<type 'numpy.ndarray'>
[115 114 121 ...,170 169 167]
[215 214 221 ...,14  13  11]

这是图像:

enter image description here

如何关闭此余数机制?有没有更好的方法来提高OpenCV的亮度?

解决方法

一个想法是在添加值之前检查添加是否会通过检查255和当前像素值之间的差异并检查它是否在值内而导致溢出.如果确实如此,我们将不会添加值,我们会直接将它们设置为255,否则我们会添加.现在,这个决策可以通过创建面具来缓解,并且 –

mask = (255 - grey) < value

然后,将此掩码/布尔数组提供给np.where,以便根据掩码在255和灰度值之间进行选择.

因此,最后我们将实施 –

grey_new = np.where((255 - grey) < value,255,grey+value)

样品运行

让我们用一个小代表性的例子来演示这些步骤.

In [340]: grey
Out[340]: 
array([[125,212,104,180,244],[105,26,132,145,157],[126,230,225,204,91],[226,181,43,122,125]],dtype=uint8)

In [341]: value = 100

In [342]: grey + 100 # Bad results (e.g. look at (0,1))
Out[342]: 
array([[225,56,24,88],[205,126,232,245,1],74,69,48,191],[ 70,25,143,222,225]],dtype=uint8)

In [343]: np.where((255 - grey) < 100,grey+value) # Expected results
Out[343]: 
array([[225,255],[255,dtype=uint8)

测试样本图像

使用问题中发布的样本图像给我们arr并使用值50,我们将 –

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读