gpt4 book ai didi

Python、OpenCV : Increasing image brightness without overflowing UINT8 array

转载 作者:太空宇宙 更新时间:2023-11-03 21:15:41 34 4
gpt4 key购买 nike

我正在尝试增加灰度图像的亮度。 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()

然而,numpy 加法显然做了类似的事情:

new_array = old_array % 256

每个高于 255 的像素强度值都会成为除以 256 的余数。

结果,我变得很黑,而不是完全变白。

这是输出:

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

这是图片:

enter image description here

如何关闭此剩余机制? OpenCV中有没有更好的方法来增加亮度?

最佳答案

一个想法是在添加之前检查添加是否会导致溢出,方法是检查255与当前像素值之间的差异并检查它是否在范围内。如果是,我们不会添加 value,我们会直接将其设置为 255,否则我们会进行添加。现在,可以通过创建掩码来简化这一决策,并且 -

mask = (255 - grey) < value

然后,将此掩码/ bool 数组输入 np.where让它根据掩码在 255gray+value 之间进行选择。

因此,最终我们的实现如下 -

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, 204, 24, 88],
[205, 126, 232, 245, 1],
[226, 74, 69, 48, 191],
[ 70, 25, 143, 222, 225]], dtype=uint8)

In [343]: np.where((255 - grey) < 100,255,grey+value) # Expected results
Out[343]:
array([[225, 255, 204, 255, 255],
[205, 126, 232, 245, 255],
[226, 255, 255, 255, 191],
[255, 255, 143, 222, 225]], dtype=uint8)

对示例图像进行测试

使用问题中发布的示例图像为我们提供 arr 并使用 value 作为 50,我们会得到 -

enter image description here

关于Python、OpenCV : Increasing image brightness without overflowing UINT8 array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54733887/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com