C 图像处理.亮度和对比度
我试图调整图像的亮度和对比度。我看了一下RGB到HSL/HSV的转换,然后调整并转换回来,但这会产生非常奇怪的输出。所以现在我在看,它似乎工作得很好。。唯一的问题是如何同时调整亮度和对比度 假设我的RGB为100,那么我想把亮度调整为两倍,对比度调整为一半。。。2和0.5。我该怎么做呢?根据第二个链接,我将为亮度的所有RGB值添加100,然后将这些新的RGB值插入对比度公式 有人有什么想法吗C 图像处理.亮度和对比度,c,colors,sdl,rgb,C,Colors,Sdl,Rgb,我试图调整图像的亮度和对比度。我看了一下RGB到HSL/HSV的转换,然后调整并转换回来,但这会产生非常奇怪的输出。所以现在我在看,它似乎工作得很好。。唯一的问题是如何同时调整亮度和对比度 假设我的RGB为100,那么我想把亮度调整为两倍,对比度调整为一半。。。2和0.5。我该怎么做呢?根据第二个链接,我将为亮度的所有RGB值添加100,然后将这些新的RGB值插入对比度公式 有人有什么想法吗 注-这是在C语言中处理SDL和原始RGB值。不确定这是否回答了您的问题,但您使用的是8位彩色图片,通常使
注-这是在C语言中处理SDL和原始RGB值。不确定这是否回答了您的问题,但您使用的是8位彩色图片,通常使用*n*位颜色调色板,或者将8位拆分为3红、3绿和2蓝 假设您使用的是选项板,您可能需要调用,因为您的操作将更改颜色 如果要拆分为3/3/2位,请记住这意味着红色只有8个离散值,绿色只有8个离散值,蓝色只有4个离散值。在这种情况下,颜色的变化可能看起来很奇怪
如果源代码只有8位,我建议在加载后将其转换为24/32位。我认为您希望在HSV这样的空间中工作。尤其是你对价值(V)感兴趣。有关从RGB转换为HSV/HSL和从vica转换为HSV/HSL的公式,请参见此链接。代码是javascript,但它是转换为C的基础。 另一件需要考虑的是卢敏安策(Y)和Luma(Y)。 我通常使用以下公式计算亮度。 我不确定最好用什么:V,Y,还是Y。Wiki说“轻量级或价值维度的定义不太明显:根据表示的目的和目标,有几种可能性。” 我一直在使用Y。Y和Y'之间的差异是由于伽马校正。只要你能正确解释,我想你可以用任何一种。但也许你可以简单地用V表示对比度和亮度 <>最后,要仔细考虑伽马校正。 编辑:让我概述一下我认为这个过程将如何进行
奇怪的输出是什么意思?由于某种原因,颜色真的不好,可能是因为我使用的是8位颜色(Uint8)。这应该是正常的,但我想对于转换,你应该使用浮点,因为其中有一些计算,我希望会有一些分割,对吗?是的,我在转换时使用双倍,然后返回RGB时返回。然后应该可以,但维基百科说,在这个模型中存在一些问题,比如改变颜色可以使图像看起来更亮或更暗。。。
Y = 0.2126 R + 0.7152 G + 0.0722 B