YUV和RGB调节色彩公式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoyafang123/article/details/82179788

1.YUV调节色彩公式(必须是量化后的YUV(16-235)),非量化后的YUV转换有问题。

转换公式为:

原始YUV(Y,U,V),转换后YUV(Y',U',V'),亮度 :g_Bright (0-1),饱和度:g_Saturation(0-1),对比度:g_Contrast (0-1)

Y'  = (g_Contrast * 2.0 * (Y - 0.5) + 0.5) * g_Saturation * 2.0;
U' = g_Bright * 2.0 * (U - 0.5) + 0.5;
V' = g_Bright * 2.0 * (V - 0.5) + 0.5;

2.GRB 调节色彩公式(以下为shader转换代码):亮度 :g_Bright (0-1),饱和度:g_Saturation(0-1),对比度:g_Contrast (0-1)

参考文章:Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)

float4 rgba=float4(R,G,B,A);

    float4 finalColor = rgba * (g_Bright*2.0f);
    //saturation饱和度:首先根据公式计算同等亮度情况下饱和度最低的值:
    float gray = 0.2125 * rgba.r + 0.7154 * rgba.g + 0.0721 * rgba.b;
    float4 grayColor = float4(gray, gray, gray,1.0f);
    //根据Saturation在饱和度最低的图像和原图之间差值
    finalColor = lerp(grayColor, finalColor, g_Saturation*2.0f);
    //contrast对比度:首先计算对比度最低的值
    float4 avgColor = float4(0.5, 0.5, 0.5,1.0f);
    //根据Contrast在对比度最低的图像和原图之间差值
    rgba = lerp(avgColor, finalColor, g_Contrast*2.0f);

return rgba;

猜你喜欢

转载自blog.csdn.net/xiaoyafang123/article/details/82179788