2017-02-17 449 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,還是對角線或其他方式變化,它都可以工作。

相關問題