2013-04-22 195 views
1

我正在嘗試調整圖像的亮度和對比度。我看了一下wiki article的RGB到HSL/HSV的轉換,然後調整和轉換回來,但是這產生了非常奇怪的輸出。所以現在我看着other examples,它似乎工作正常..唯一的問題是我怎樣才能同時調整亮度和對比度?圖像處理 - 亮度和對比度

所以說我有100 100 100的RGB,然後我想調整亮度加倍和對比一半... 2和0.5。我會怎麼做呢?根據第二個鏈接,我會爲亮度添加100個RGB值,然後將這些新的RGB值插入對比度公式中?

任何人有任何想法?

P.S - 這是在C中使用SDL和原始RGB值。

+0

你是什麼奇怪的輸出是什麼意思? – LtWorf 2013-04-22 08:59:42

+0

由於某種原因,顏色確實關閉,這可能是因爲我使用8​​位顏色(Uint8)。 – Travv92 2013-04-22 09:36:20

+0

這應該是正常的,但我猜,因爲裏面還有一些計算,我希望有些部門的權利,你應該使用浮點轉換? – LtWorf 2013-04-22 09:37:15

回答

0

不確定這是否回答您的問題,但您使用的是8位彩色圖片,通常使用* n *位顏色的調色板或將8位分成3紅,3綠和2藍等。

假設您使用的是調色板,您可能需要撥打SDL_SetPalette,因爲您的操作會改變顏色。

如果要分割3/3/2位,請記住,這意味着紅色只有8個離散值,綠色只有8個離散值,藍色只有8個離散值。在這種情況下顏色的變化可能看起來很奇怪。

如果只有來源是8位,我建議加載後將其轉換爲24/32位。

0

我想你想在一個空間如HSV工作。特別是你對價值(V)感興趣。看到這個鏈接公式轉換從RGB到HSV/HSL和反之亦然。該代碼是JavaScript,但它的基本轉換爲C. http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c

另一個要考慮的是亮度(Y)和亮度(Y') 我通常用下面的公式亮度。 http://en.wikipedia.org/wiki/Luminance_%28relative%29

Y = 0.2126 R + 0.7152 G + 0.0722 B 

我不知道什麼是最好的使用方法:V,Y,或Y」。維基說:「輕量或價值維度的定義不太明顯:取決於代表的目的和目標有幾種可能性。」 http://en.wikipedia.org/wiki/HSL_and_HSV#Lightness

我一直在使用Y.Y和Y'之間的差異是由於伽馬校正。只要你正確地考慮它,我認爲你可以使用。但也許你可以簡單地使用V來獲得對比度和亮度。

最後,要小心考慮伽馬校正。

編輯:讓我概述我認爲這個過程會如何。

  1. 轉換顏色成分漂浮
  2. 如果顏色是sRGB的(其是非線性的),然後轉換爲RGB(其是直鏈)
  3. 轉換RGB到HSV
  4. 刻度值(V )來改變亮度。對比度也改變飽和度(S)。如果必要的話
  5. 轉換回RGB
  6. RGB轉換爲sRGB。
  7. 轉換顏色成分回到範圍[0,255]。
相關問題