如何在 OpenCV 中调整图像部分的亮度

nic*_*ine 5 python opencv luminance

我有以下图像。 在此处输入图片说明

如果我将平均亮度绘制为 x 像素位置的函数,我可以看到图像沿中心比边缘更亮。

在此处输入图片说明

我想使用 OpenCV 纠正这个问题,以便整个图像的亮度相同。这可能吗?

编辑:到目前为止我的代码是

import cv2
import pylab

img = cv2.imread('3.jpeg', 1)
cv2.imshow("img",img)

lab= cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
cv2.imshow("lab",lab)

l, a, b = cv2.split(lab)

values = []
for c in xrange(l.shape[1]):
    count = 0
    for r in xrange(l.shape[0]):
        count += l[r][c]
    values.append(1.0 * count / l.shape[0])

pylab.figure()
pylab.ylabel('Average Luminance')
pylab.xlabel('X axis')
pylab.plot(values, 'k-')
pylab.show()
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 1

我有一个方法,但我今天不想为它编写任何代码,更糟糕的是,我不会说 Python。但是看看你如何确定亮度不均匀,你可以自己清楚地编码。

首先,我会进入实验室模式(就像您已经做的那样),并拆分通道。保留ab通道以供以后重建。

现在采用Lightness( L) 通道并用大半径对其进行模糊处理 - 这将消除所有高频变化并仅保留您想要消除的低频变化。假设新的模糊通道在最小值 110 和最大值 125 之间变化。从所有值中减去 110,现在图像中每个位置的值都在 0 到 15 之间。

现在从原始的、未模糊的Lightness通道中减去 0..15 之间的值以消除低频变化,然后将修改后的亮度与原始通道ab通道重新组合。

我希望这足够清楚 - 如果不是,请询问!

与构建抛物线来匹配光衰减相比,该方法的优点在于,无论亮度随 x、y、对角线或其他方式变化,该方法都有效。