RGB颜色原理
参考:http://www.cnblogs.com/harrytian/archive/2012/12/12/2814210.html
工作中经常和颜色打交道,但却从来没有从原理上了解一下,这篇文章希望给同样感兴趣的人一些启发。文章来源大多为各种文章阅读后,整理而来。
颜色是光给人的一种视觉感知现象。说到颜色,首先要了解自然光在人的眼睛中的反应。在电磁波普中,可见光波长在400-700nm之间,还有些人能感知到380-780nm之间的电磁波,并且人对555nm的电磁波(绿光区域)最为敏感。
颜色基本参数为:色相,色阶,饱和度。
色相,是用来区别颜色的标志,是光由于光波、频率的不同而产生的颜色性质。人们把易于识别的颜色分类,如红色、绿色,都叫色相。但是黑、白、灰,不成为色相。色相是在光谱上自然分割的结果,而黑、白、灰是各种中和、配色后产生的颜色。
色阶(明度),是指颜色的亮度指数,由物体反射出来光波的多少来量化。图像的色彩丰满度和精细度是由色阶决定的。最亮的定义为白色,最不亮的定义为黑色。色阶与色相无关,颜色色阶一般由两种情况:一种是同色相,不同明度,如红色,加白色或者加黑色后,能够产生不同的明亮层次。
饱和度(纯度),是只色彩的鲜艳程度,饱和度取决于颜色中“含色成分(色相)”和“消色成分(灰色)”之间的比例。含色成为越大,饱和度越高,反之越低。当饱和度为零时,就是灰色。任何色相饱和度趋近于零的时候,就产生灰色,这也是为什么灰色不成为色相。
从小我们学到的三原色是由红、黄、蓝基色组成,在印刷、绘画标准中,基础色纸张是白色的,采用消减型原理,理论上可以调配出除了三原色以外的任意颜色。
回到工业领域,计算机显示设备、电视机、手机的屏幕基础颜色是黑色,而且越黑越好。在黑色基础上,如果要想显示颜色,就要采用叠加型原理,因此采用的三原色就是红、绿、蓝,就是我们常说的RGB。而叠加原理,是要发光叠加的,这也是为什么在黑暗中,我们看不到消减原理产生的印刷品,却可以看见叠加原理产生的屏幕颜色。
由于基础色是黑色的叠加原理,如果三种颜色都没有,就是黑色#000000,如果三种颜色都是饱和的全部叠加在一起就是白色#FFFFFF,因此当R-G-B三种颜色,或者两种、甚至一种,以不同比例混合后,就可以产生任意多的颜色。
在32 Bit显示模式下,前3个Byte,即24Bit用来显示三种颜色的分量,最后一个Byte用来显示透明度,即ALPHA值。这样每一个颜色分量有0~255,一共256种取值,则显示设备可以显示256*256*256 = 16777216种不同颜色,这就是16M色的由来。
而现实情况下,人们只能识别1000万种颜色,也就是咱们看不出#131313和#141414的区别。
我们看看叠加原理上,颜色是如何产生的,初识屏幕是黑色的,即没有任何颜色叠加RGB(0,0,0),红色全开启是RGB(255,0,0),绿色全开启RGB(0,255,0),红色和绿色调配在一起就是黄色RGB(255,255,0)。
讲到绘画、图像,自然离不开谈颜色,所有的图案都是由基本形状和颜色组成,颜色构成了我们图像处理的一个重要部分,下面我们将要了解颜色的原理,它将是我们美工的基础。
一、RGB三色原理
在中学的物理课中我们可能做过棱镜的试验,白光通过棱镜后被分解成多种颜色逐渐过渡的色谱,颜色依次为红、橙、黄、绿、青、蓝、紫,这就是可见光谱。其中人眼对红、绿、蓝最为敏感,人的眼睛就像一个三色接收器的体系,大多数的颜色可以通过红、绿、蓝三色按照不同的比例合成产生。同样绝大多数单色光也可以分解成红绿蓝三种色光。这是色度学的最基本原理,即三基色原理。三种基色是相互独立的,任何一种基色都不能有其它两种颜色合成。红绿蓝是三基色,这三种颜色合成的颜色范围最为广泛。红绿蓝三基色按照不同的比例相加合成混色称为相加混色。
红色+绿色=黄色
绿色+蓝色=青色
红色+蓝色=品红
红色+绿色+蓝色=白色
黄色、青色、品红都是由两种及色相混合而成,所以它们又称相加二次色。另外:
红色+青色=白色
绿色+品红=白色
蓝色+黄色=白色
所以青色、黄色、品红分别又是红色、蓝色、绿色的补色。由于每个人的眼睛对于相同的单色的感受有不同,所以,如果我们用相同强度的三基色混合时,假设得到白光的强度为100%,这时候人的主观感受是,绿光最亮,红光次之,蓝光最弱。
除了相加混色法之外还有相减混色法。在白光照射下,青色颜料能吸收红色而反射青色,黄色颜料吸收蓝色而反射黄色,品红颜料吸收绿色而反射品红。也就是:
白色-红色=青色
白色-绿色=品红
白色-蓝色=黄色
另外,如果把青色和黄色两种颜料混合,在白光照射下,由于颜料吸收了红色和蓝色,而反射了绿色,对于颜料的混合我们表示如下:
颜料(黄色+青色)=白色-红色-蓝色=绿色
颜料(品红+青色)=白色-红色-绿色=蓝色
颜料(黄色+品红)=白色-绿色-蓝色=红色
以上的都是相减混色,相减混色就是以吸收三基色比例不同而形成不同的颜色的。所以有把青色、品红、黄色称为颜料三基色。颜料三基色的混色在绘画、印刷中得到广泛应用。在颜料三基色中,红绿蓝三色被称为相减二次色或颜料二次色。在相减二次色中有:
(青色+黄色+品红)=白色-红色-蓝色-绿色=黑色
用以上的相加混色三基色所表示的颜色模式称为RGB模式,而用相减混色三基色原理所表示的颜色模式称为CMYK模式,它们广泛运用于绘画和印刷领域。
RGB模式是绘图软件最常用的一种颜色模式,在这种模式下,处理图像比较方便,而且,RGB存储的图像要比CMYK图像要小,可以节省内存和空间。
CMYK模式是一种颜料模式,所以它属于印刷模式,但本质上与RGB模式没有区别,只是产生颜色的方式不同。RGB为相加混色模式,CMYK为相减混色模式。例如,显示器采用RGB模式,就是因为显示器是电子光束轰击荧光屏上的荧光材料发出亮光从而产生颜色。当没有光的时候为黑色,光线加到最大时为白色。而打印机呢?它的油墨不会自己发出光线。因而只有采用吸收特定光波而反射其它光的颜色,所以需要用减色法来解决。
二、HLS(色相、亮度、饱和度)原理
HLS 是Hue(色相)、Luminance(亮度)、Saturation(饱和度)。色相是颜色的一种属性,它实质上是色彩的基本颜色,即我们经常讲的红、橙、黄、绿、青、蓝、紫七种,每一种代表一种色相。色相的调整也就是改变它的颜色。
亮度就是各种颜色的图形原色(如RGB图像的原色为R、G、B三种或各种自的色相)的明暗度,亮度调整也就是明暗度的调整。亮度范围从 0 到255,共分为256个等级。而我们通常讲的灰度图像,就是在纯白色和纯黑色之间划分了256个级别的亮度,也就是从白到灰,再转黑。同理,在RGB模式中则代表个原色的明暗度,即红绿蓝三原色的明暗度,从浅到深。
饱和度是指图像颜色的彩度.对于每一种颜色都有一种人为规定的 标准颜色,饱和度就是用描述颜色与标准颜色之间的相近程度的物理量。调整饱和度就是调整图像的彩度。将一个图像的饱和度条为零时,图像则变成一个灰度图像,大家在电视机上可以试一式调整饱和度按钮。
另外还有一个概念,就是对比度。对比度是指不同颜色之间的差异。对比度越大,两种颜色之间的相差越大,反之,就越接近。如,一幅灰度图像提高它的对比度会更加黑白分明,调到的极限时,变成黑白图像,反之,我们可以得到一幅灰色的画布。
我们了解了颜色的原理,我们在图像处理中就不会茫然,并且对于调整颜色也可以更快,更准确。
RGB颜色原理的更多相关文章
- RGB颜色二值化
原理:RGB颜色根据计算'灰度'的公式,可以转化为黑白2种颜色,实现二值化. 业务场景的应用:可以根据背景颜色,取一个黑色或白色的颜色,作为背景色上的文案字体颜色 具体代码: function get ...
- Sass函数--颜色函数--RGB颜色函数
RGB颜色函数-RGB()颜色函数 主要分为 RGB , HSL 和 Opacity 三大函数,当然其还包括一些其他的颜色函数,比如说 adjust-color 和 change-color 等.1. ...
- 如何将24位RGB颜色转换16位RGB颜色
有许多朋友第一次使用16位彩色显示屏会遇到如何将24位RGB颜色转换为对应的16位RGB颜色的问题, 通过查阅相关资料,就写一下其中的转换原理吧,希望对大家会有所帮助. 我们知道24位RGB是分别由8 ...
- 基于OpenCV的火焰检测(二)——RGB颜色判据
上文跟大家分享了在做火焰检测中常用到的图像预处理方法,从这一篇博文开始,我将向大家介绍如何一步一步地检测出火焰区域.火焰提取要用 到很多判据,今天我要向大家介绍的是最简单的但是很有效的判据--RGB判 ...
- RGB颜色 三者都是0为黑色而255是白色 解释
问题: RGB颜色 都是0为黑色而255是白色 与日常生活的黑色白色差距怎么那么大,(与物理学中的黑色吸收光是否相悖)而且为什么要这样定义呢? 链接:https://www.zhihu.com/que ...
- RGB颜色中的参数是变量的时候,为什么要加上两个+号在左右?
<script> function draw(){ var c=document.getElementById("mycanvas"); var cxt=c.getCo ...
- HTML中RGB颜色查询对照表
RGB颜色查询对照表 因为兼容性问题,色阶板功能只能在IE浏览器中运行 RGB颜色对照表 #FFFFFF #FFFFF0 #FFFFE0 #FFFF00 #FFFAFA ...
- RGB颜色查询对照表
RGB颜色查询对照表 RGB颜色对照表 #FFFFFF2015-02-05 #FFFFF0 #FFFFE0 #FFFF00 #FFFAFA #FFFAF0 #FFF ...
- iOS中RGB颜色转换
iOS中RGB常用的色值,同时可将对颜色的设置定义成宏,方便开发应用,如: // RGB颜色转换(16进制->10进制) #define UIColorFromRGB(rgbValue) [UI ...
随机推荐
- ORB-SLAM (四)tracking单目初始化
单目初始化以及通过三角化恢复出地图点 单目的初始化有专门的初始化器,只有连续的两帧特征点均>100个才能够成功构建初始化器. ); 若成功获取满足特征点匹配条件的连续两帧,并行计算分解基础矩阵和 ...
- 关于transition动画下,如果有fixed元素,渲染的奇葩问题
之前我们机票页面有生成一个低价日历,然后我们有一个需求就是滚动到那个月份,对应显示这个月,然后这个区域是fixed定位的,然后奇怪的事情发生了,就是低价日历的动画执行完后,修改页面的html却没有正常 ...
- vue3.0 部署的基础流程
1.创建vue.config.js 主要是负责做设置的 2.修改vue.config.js 参考官方说明: 注意:对于本地开发的同学要注意,你之前在处理网络请求时是在8080端口下请求,现在如果换成了 ...
- formValidator 不支持jquery1.9以上的解决办法
不支持的原因是因为jquery1.9以上版本剔除了$.browser 在formValidator 源码最顶层.或者jquery源码里加上如下代码 $.browser = {};$.browser.m ...
- Struts2(四.注册时检查用户名是否存在及Action获取数据的三种方式)
一.功能 1.用户注册页面 <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- Leetcode. 回文字符串的分割和最少分割数
Q1: 回文字符串的分割 Given a string s, partition s such that every substring of the partition is a palindrom ...
- Python——数据类型之set
本篇主要内容 • set集合的特点 • set集合的建立 • set集合的17个内置函数 • set集合的数学运算符号 1.set集合类型的特点. 1.无序 2.不同元素 3.元素必须不可变.(数字, ...
- STL中的set容器的一点总结2
http://blog.csdn.net/sunshinewave/article/details/8068326 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像 ...
- valgrind使用
参数配置 gcc -g: 增加调试信息,供valgrind精确定位. -O0:关闭gcc优化:优化产生的代码可能会造成valgrind误判. valgrind --leak-check=full no ...
- element-ui的el-tabel组件怎么使用type=“expand”实现表格嵌套并且在子表格没有数据的时候隐藏展开按钮
效果如下: 试过很多种办法,思路都在怎么控制<el-table-column type="expand">里面的type上,比如使用v-show等等,但是发现,要不就是 ...