gpt4 book ai didi

python ,OpenCV : Increasing image brightness without overflowing UINT8 array

转载 作者:太空狗 更新时间:2023-10-30 01:46:12 24 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 中的亮度?

最佳答案

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

mask = (255 - grey) < value

然后,将此掩码/ bool 数组提供给 np.where让它根据掩码在 255grey+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/37822375/

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