2013-04-22 207 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]。
相关问题