2017-02-17 172 views
3

我有以下图像。 enter image description here如何调整OpenCV中图像部分的亮度

如果我绘制平均亮度作为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() 
+0

难道你不能只使用imgur(SO使用的默认图像托管服务)并嵌入图像,所以它们是可见的,无需点击并转到其他网站?这有点烦人。 |只需适当调整每列的强度即可。你知道每列的平均强度(可能适合它的抛物线),并且你知道你想要的目标强度(在所有列中不变)。对每列进行线性拟合以获得偏移+比例。应用这些列。 –

回答

1

我有一个方法,但我不觉得像今天这样写任何代码,它和,更糟糕的是,我不说话了Python。但看看你如何确定亮度不均匀,你可以自己清楚地编码。

首先,我会去实验室模式(就像你已经做过的那样),然后分开通道。保留ab频道供以后重建。

现在采取LightnessL)通道并使其具有较大的半径模糊度 - 这将消除所有高频变化并仅保留想要消除的低频变化。假设新的模糊通道在最小值110和最大值125之间变化。对所有值减去110,现在图像中每个位置的值都在0到15之间。

现在从原始的,不模糊的Lightness通道减去0..15之间的值,以除去低频率的变化,然后重新组合该改性亮度与原始ab频道。

我希望这已经够清楚了 - 如果没有,请只问!

该方法优于构造抛物线以匹配光线衰减的优点在于,无论亮度随x,y,还是对角线或其他方式变化,它都可以工作。