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

相关文章

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-