1.亮度

  • PS里的亮度调整,主要是控制图片整体的亮度,可以弥补曝光过度和曝光补足需要补光的问题。
  • 对RGB图像来说,亮度算法有很多种,最简单的一种就是直接整体提升或降低像素的RGB值。(RGB值为0到1,0纯黑,1纯白)
  • 公式如下:
    • 新RGB值 = 旧RGB值 + 亮度值
    • 亮度值在-1到1之间
    • 新RGB值需要控制范围0到1
使用OpenGL实现:

顶点着色器:

attribute vec2 a_position;
attribute vec2 a_texCoord;
varying vec2 texcoordOut;void main()
{texcoordOut = a_texCoord;gl_Position = vec4(a_position, 0.0, 1.0);
}

片段着色器:
u_texture为原图,brightness为调整亮度值,变化范围-1到1

precision highp float;uniform sampler2D u_texture;
varying vec2 texcoordOut;uniform float brightness;void main()
{vec4 srcColor = texture2D(u_texture, texcoordOut);gl_FragColor = vec4(clamp(srcColor.rgb + brightness, 0.0, 1.0), srcColor.a);
}
效果:

2.对比度

  • PS里的对比度调整,可以增大图片明暗区别,两处更亮,暗处更暗,使得明暗更分明

  • 对RGB图像来说,对比度算法依然有很多种,在不知道图像平均亮度的情况下,可以取0.5作为图像的平均亮度。超出0.5的像素做类似提亮的操作,低于0.5的像素做类似压暗的操作。(RGB值为0到1,0纯黑,1纯白)

  • 公式如下:

    • 新RGB值 = 旧RGB值 + (旧RGB值 - 0.5)× 对比度值
    • 对比度值在0到1之间
    • 新RGB值需要控制范围0到1
使用OpenGL实现:

顶点着色器:

attribute vec2 a_position;
attribute vec2 a_texCoord;
varying vec2 texcoordOut;void main()
{texcoordOut = a_texCoord;gl_Position = vec4(a_position, 0.0, 1.0);
}

片段着色器:
u_texture为原图,contrast为调整对比度值,变化范围0到1

precision highp float;uniform sampler2D u_texture;
varying vec2 texcoordOut;uniform float contrast;void main()
{vec4 srcColor = texture2D(u_texture, texcoordOut);vec3 contrastColor = srcColor.rgb + (srcColor.rgb - vec3(0.5)) * contrast;gl_FragColor = vec4(clamp(contrastColor, 0.0, 1.0), srcColor.a);
}
效果:

3.饱和度

  • PS里的饱和度调整,可以使得颜色更饱满,更鲜艳。降低饱和度时,图片会越接近灰色(相当于失去了所有的色彩)

  • 饱和度调整算法,需要先将RGB颜色转为HSV颜色,然后调整其S部分,最后再传唤回RGB颜色。从而达到线性调整饱和度的目的。(RGB值为0到1,0纯黑,1纯白)

  • PS饱和度调整算法主要是利用HSL颜色空间进行饱和度S的上下限控制,对RGB空间进行补丁式调整。调整过程是在RGB空间进行,其原理简单的说就是判断每个像素点R/G/B值是否大于或小于平均值,大于加上调整值,小于则减去调整值,如何计算各个像素点的调整系数是关键。本算法主体思想就是利用HSL来计算各点的调整系数。

  • 公式如下:


使用OpenGL实现:

顶点着色器:

attribute vec2 a_position;
attribute vec2 a_texCoord;
varying vec2 texcoordOut;void main()
{texcoordOut = a_texCoord;gl_Position = vec4(a_position, 0.0, 1.0);
}

片段着色器:
u_texture为原图,saturation为调整饱和度值,变化范围-1到1

precision highp float;uniform sampler2D u_texture;
varying vec2 texcoordOut;uniform float saturation;void main()
{vec4 srcColor = texture2D(u_texture, texcoordOut);float rgbMax = max(max(srcColor.r, srcColor.g), srcColor.g);float rgbMin = min(min(srcColor.r, srcColor.g), srcColor.g);float delta = rgbMax - rgbMin;float value = rgbMax + rgbMin;// HSLfloat L = value / 2.0;float S;if (L < 0.5) {S = delta / value;} else {S = delta / (2.0 - value);}float alpha;vec3 resultColor;if (saturation < 0.0) {alpha = saturation;resultColor = vec3(L) + (srcColor.rgb - vec3(L)) * (1.0 + alpha);} else {if (saturation + S >= 1.0) {alpha = S;} else {alpha = 1.0 - saturation;}alpha = 1.0 / alpha - 1.0;resultColor = srcColor.rgb + (srcColor.rgb - vec3(L)) * alpha;}gl_FragColor = vec4(clamp(resultColor, 0.0, 1.0), srcColor.a);
}
效果:

4.色阶

  • 色阶是什么:色阶就是用直方图描述出的整张图片的明暗信息。
  • 从左至右是从暗到亮的像素分布,黑色三角代表最暗地方(纯黑),白色三角代表最亮地方(纯白)。灰色三角代表中间调。

  • 每一个色阶定义有两组值:

    • 一组是输入色阶值,包含黑灰白三个值, 上图中:黑点值为0,灰点为1.0,白点为255
    • 另一组是输入色阶值,包含黑白两个值,上图中:输出色阶黑为0,白为255
  • 色阶调整的实现是:

    • 当输入值<黑点值时,全部变为输出色阶的黑值。
    • 当输入值>白点时,全部变为输出色阶的白值。
    • 当输入值介于黑值与白值之间时,则结合灰度系数,按比例重新计算,变为一个新的值。
使用OpenGL实现:

顶点着色器:

attribute vec2 a_position;
attribute vec2 a_texCoord;
varying vec2 texcoordOut;void main()
{texcoordOut = a_texCoord;gl_Position = vec4(a_position, 0.0, 1.0);
}

片段着色器:
u_texture为原图,highLight为白点值,变化范围0到1,shadow为黑点值,变化范围0到1,midtone为灰点值,变化范围0到1。 需要注意必须满足:shadow < midtone< highLight

precision highp float;uniform sampler2D u_texture;
varying vec2 texcoordOut;uniform float highLight;
uniform float shadow;
uniform float midtone;void main()
{vec4 srcColor = texture2D(u_texture, texcoordOut);float diff = highLight - shadow;vec3 rgbDiff = max(srcColor.rgb - shadow, 0.0);gl_FragColor = vec4(clamp(pow(rgbDiff / diff, vec3(1.0 / midtone)), 0.0, 1.0), srcColor.a);
}
效果:

效果为黑点值0.1,白点值0.9,只移动灰点值的效果:

PS里的亮度/对比度/饱和度/色阶算法-OpenGL实现相关推荐

  1. Unity 3D 游戏通用系统设置页面,自定义按键设置,背景虚化,图像设置,亮度对比度饱和度音量调节,分辨率窗口化,帧率垂直同步,抗锯齿,阴影质量,纹理质量设置

    简易的游戏通用设置页面 本文章包含所有代码及UI结构 页面效果: UI结构(便于管理): 代码: 思路: 整个页面的父物体SettingPanel上挂载管理代码,用于获取设置页面中所有的功能按钮,拖动 ...

  2. python numpy opencv调整图片亮度对比度饱和度

    python 调整图片亮度对比度饱和度 安装依赖库 亮度变换 对比度变换 综合调整(完整代码) (想要完整代码直接划到最后) 原理比较简单,本质上是对图像各个通道的每个像素点做线性变换,对超出范围[0 ...

  3. 亮度 对比度 饱和度 灰度

    亮度是指画面的明亮程度,单位是堪德拉每平米(cd/m2)或称nits,也就是每平方公尺分之烛光. 亮度对应由背光电压控制; 对比度是一个亮度的比值,定义是:在暗室中,白色画面(最亮时)下的亮度除以黑色 ...

  4. 亮度 对比度 饱和度 灰度【转】

    本文转载自:http://blog.csdn.net/liuxd3000/article/details/17464019 亮度是指画面的明亮程度,单位是堪德拉每平米(cd/m2)或称nits,也就是 ...

  5. 海康威视sdk调整摄像头的亮度 对比度 饱和度 色度

    使用海康摄像头采集的代码,参考之前发布的一篇文章,http://t.csdn.cn/Q62Gt 在上次代码中并没有录入关于海康威视sdk调整摄像头参数的部分,查看海康sdk中头文件,<HCNet ...

  6. ffmpeg 亮度 对比度 饱和度

    设置contrast表达式,值必须是一个-1000.0-1000.0间的浮点数,默认为1.0 brightness 设置brightness表达式.值必须是一个-1.0-1.0间的浮点数,默认为0 s ...

  7. 用OpenCV实现Photoshop算法(五): 亮度对比度调整

    系列文章: 用OpenCV实现Photoshop算法(一): 图像旋转 用OpenCV实现Photoshop算法(二): 图像剪切 用OpenCV实现Photoshop算法(三): 曲线调整 用Ope ...

  8. 深度学习AI美颜系列---图像自动亮度对比度与调色

    在人像美颜的拍照界面,往往由于光线和环境因素的影响,导致我们拍出的照片质量较差,包括噪声多,曝光度过低等等问题,因此,大多数相机应用都会在Camera界面添加一定的图片预处理,比如自动亮度对比度调整, ...

  9. 在QT框架下进行仿照PS图像调整功能设计(亮度对比度,色相饱和度及明度)

    原文链接:https://blog.csdn.net/maozefa/article/details/4778934 图像亮度调整分为非线性和线性两种方法. 非线性图像亮度是将图像像素的R.G.B分别 ...

最新文章

  1. MySql cmd下的学习笔记 —— 有关建立数据库的操作(连接Mysql,建立数据库,删除数据库等等)...
  2. [剑指offer]面试题7:用两个栈实现队列
  3. 工业互联网白皮书_发布|《工业互联网平台安全白皮书(2020)》发布
  4. JMX学习笔记(一)-MBean
  5. 杭州获评全国最智慧城市
  6. html cdn不缓存,【前端开发日常 - 6】七牛CDN上的网页缓存问题及HTML禁止缓存(续)...
  7. java中的weblogic_Java访问Weblogic中的连接池
  8. vue子组件mounted不执行_vue中父子组件传值,解决钩子函数mounted只运行一次的问题...
  9. Word技巧:快速将不同字数的姓名对齐
  10. ArcGIS实现全国人口普查数据可视化以及热力图
  11. 如何设置父层DIV不动子层DIIV透明且随滚动条晃动或是不晃动
  12. CAD2007学习笔记
  13. 服务器ie不能打开购物网站,[Answers 分享]通过IE浏览器无法打开网上银行或者支付宝等加密安全站点...
  14. 市面上最适合跑步用的耳机有哪些、分享五款最优秀的跑步耳机
  15. scheme 教程 #lang racket
  16. 微信公众号获取用户当前地址经纬度
  17. js定时器实现右下角弹窗广告缓慢弹出
  18. Ubuntu 20.04视频播放
  19. 最常用的酒店IPTV系统实施方案
  20. 0.0.0.0和255.255.255.255这两个IP地址到底有啥用?

热门文章

  1. 有关像素流送手机浏览器触屏bug的总结
  2. react hooks介绍以及常用hooks列举
  3. [附源码]Python计算机毕业设计SSM基于的英语学习网站的设计与实现(程序+LW)
  4. js满三个增加一个逗号
  5. python三级联动函数式_python三级联动_省县市三级联动
  6. WLAN密码忘记了怎么办?
  7. PMP项目管理项目采购管理
  8. 美国计算机科学专业硕士毕业薪,美国硕士毕业生薪水最高的10种专业
  9. 领取招财币,第二天,
  10. 电脑蓝屏处理:WHEA_UNCORRECTABLE_ERROR