RGB、HSB\HSV、HSL三种颜色空间的原理理解与转换

2023-10-13 16:10

本文主要是介绍RGB、HSB\HSV、HSL三种颜色空间的原理理解与转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

『"Color" refers to the human brains subjective interpretation of combination of a narrow band of wavelength of light』---- WIKIBOOKS

简单说来,颜色是人脑对不同波段光长的主观理解。

----------------------------------Primary Colors------------------------------------

元色,这个可以理解为向量空间的基。

也就是说一个颜色空间的所有色彩都可以通过这个空间的元色通过某种方式生成。(简单的就是线性相加,比如rgb空间)


Tranditional Colors

站在巨人肩上的巨人大牛顿在1672年使用,红、黄、蓝做为三元色。这组组合也被称为"Painter's Colors",现在仍在使用。

但这种组合并不能完全生成所有的颜色。


Subtractive Colors

应用减法框架的颜色空间,三元色:蓝绿、黄色和洋红(cyan, yellow and magenta)。

这种框架下的颜色是,使用白光减去三种光源成份得到色彩。如下图:




Additive Colors

应用加法的颜色空间,其中的颜色由原色相加得到。比如我们常见的RGB(Red, Green, Blue)。





----------------------------------HSL------------------------------------

H指Hue,可以理解为区别颜色的名称、类型,比如黄色、蓝色等。

S指Saturation,指颜色的『丰满』程度,该值越大,颜色越艳丽。

L指Lightness,指亮度。从黑到白。


三者之间的关系是:

该颜色空间中,心Lightness为轴心;Hue围绕L旋转过程中颜色发生变化;每一个与L正交的平面上,以交点为中心向某方向(H)发射的射线是S。


我觉得colorizer.org上面的图挺形象,搬过来如下:






----------------------------------HSB与HSV------------------------------------

注意,这两个东西是大大滴不同。

这两者里面的Hue都是指的同一个拿含意(可以理解成颜色类型),可以用下面这个色环表示:



但它们的其它两维(尤其是saturation)所指的含义却差别很大。

在HSL中:

Lightness控制颜色,从黑到hue再到白。颜色的明亮程度完全靠L控制。

Saturation控制颜色的灰度冷暖。


但在HSB中:

同一Hue颜色的冷暖、色调、明暗受Saturation和Brightness(value)共同影响。

下面这两幅图对比比较明显。



可以在http://colorizer.org/尝试调整不同维度值,感受颜色变化。



----------------------------------转换公式------------------------------------

RGB 到 HSB\HSV


RGB 到 HSL



其中,M = max(R, G, B), m = (R, G, B)。


HSB\HSV 到HSL



HSL 到 HSV\HSB








参考:http://colorizer.org/

https://en.wikipedia.org/wiki/HSL_and_HSV

https://en.wikibooks.org/wiki/Color_Models:_RGB,_HSV,_HSL

http://codeitdown.com/hsl-hsb-hsv-color/


这篇关于RGB、HSB\HSV、HSL三种颜色空间的原理理解与转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/204375

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的