色彩调整之亮度、曝光度、对比度滤镜

GPUImageBrightnessFilter

调节图像的亮度,公式如下:

y = x + 255 ∗ b y = x + 255 * b y=x+255b
其中 x x x为调节前的像素值, y y y为调节后的像素值, b b b为调节参数;即分别在R、G、B三通道上加上调节参数即可。

vec3 col = texture(iChannel0,uv).rgb;
float brightness = 0.5;
col += vec3(brightness);
fragColor = vec4(col, 1.);

brightness等于0.0、0.5、0.7 时效果如下:

GPUImageExposureFilter

调节图像的曝光度。根据维基百科给出的定义:

曝光值是一个以2为底的对数刻度系统。曝光值(EV)满足公式: E V = l o g 2 N 2 t EV = log_{2}\frac{N^2}{t} EV=log2tN2 2 E V = N 2 t 2^{EV} = \frac{N^2}{t} 2EV=tN2。其中N是光圈(f值);t是曝光时间(快门),单位秒。

因为我们关心的是曝光值大小与图像的关系,所以只看 2 E V 2^{EV} 2EV即可。这里GPUImage的作者认为图像的呈现效果是与 2 E V 2^{EV} 2EV大小成线性关系的。

// 曝光值设置成1.0
const float exposure = 1.;
vec2 uv = fragCoord/iResolution.xy;
vec4 col = texture(iChannel0,uv);
// 调整图像的RGB
col.rgb = col.rgb * pow(2.,exposure);
fragColor = vec4(col.rgb,1.0);

exposure等于0.0、1.0、1.5 时效果如下:

GPUImageContrastFilter

调节图像的对比度。对比度,简单来讲就是反应了一张图像的亮区域和暗区域的层次感。更详细的内容请访问对比度。对比度的算法公式如下:

y = [ x − 127.5 ∗ ( 1 − b ) ] ∗ k + 127.5 ∗ ( 1 + b ) y = [x - 127.5 * (1 - b)] * k + 127.5 * (1 + b) y=[x127.5(1b)]k+127.5(1+b)

其中 x x x为调节前的像素值, y y y为调节后的像素值; b b b的取值范围 [ − 1 , 1 ] [-1,1] [1,1],用于调节亮度; k k k用于调整对比度。特别地: 当 b = 0 时 , y = ( x − 127.5 ) ∗ k + 127.5 当b=0时, y = (x - 127.5) * k + 127.5 b=0y=(x127.5)k+127.5,此时只调节对比度;当 k = 1 时 , y = x + 255 ∗ b k=1时, y = x + 255 * b k=1y=x+255b,此时只调节亮度。

vec3 col = texture(iChannel0,uv).rgb;
float contrast = 0.2;
col = (col.rgb - vec3(.5)) * contrast + vec3(.5);
fragColor = vec4(col, 1.);

contrast等于1.0、2.0、3.0 时效果如下:

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值