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

标签 python opencv luminance

我有下图。 enter image description here

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

enter image description here

我想使用 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()

最佳答案

我有一个方法,但我今天不想为它编写任何代码,更糟糕的是,我不会说 Python。但是看你是怎么判断亮度不均匀的,自己编码就清楚了。

首先,我会进入Lab 模式(就像您已经做的那样),然后拆分 channel 。保留ab channel 以备后用。

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

现在从原始的、未模糊的 Lightness channel 中减去 0..15 之间的值以去除低频变化,然后将修改后的 Lightness 与原始的 a 重新组合和 b channel 。

我希望你说得够清楚了——如果还不清楚,请尽管问!

与构造抛物线来匹配光衰减相比,此方法的优势在于,无论亮度随 x、y、对角线或其他方式变化,它都会起作用。

关于python - 如何在 OpenCV 中调整图像部分的亮度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42305771/

相关文章:

python - python optparse的异常处理

c++ - OpenCV/C++ - 将图像转换为 double vector 以进行 FFT(快速傅里叶变换)

python - OpenCV Python:窗口大小和鼠标事件坐标

image-processing - Gamma 校正到底需要什么?

algorithm - 如何确定亮度%?

python - Mapreduce Job 查找 python 中的词频计数

python - 听不到我试图用 pygame 玩的声音

python - matplotlib:在轴上绘制一个框

python - 带有 python 的 OpenCV VideoWriter 提供 5.54kb 文件

iPhone 摄像头亮度...它是如何物理测量的?