颜色空间RGB与HSV(HSL)的转换

颜色空间RGB与HSV(HSL)的转换

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

颜色空间RGB与HSV(HSL)的转换此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

一般的3D编程仅仅须要使用RGB颜色空间就好了,但事实上美术人员很多其它的是使用HSV(HSL),由于能够方便的调整饱和度和亮度。

有时候美术须要程序帮助调整饱和度来达到特定风格的渲染效果,这时候就须要转换颜色空间了。

出处:http://zh.wikipedia.org/wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4

HSL 和 HSV(也叫做 HSB)是对RGB 色彩空间中点的两种有关系的表示,它们尝试描写叙述比 RGB 更准确的感知颜色联系,并仍保持在计算上简单。HSL 表示 hue(色相)、saturation(饱和度)、lightness(亮度),HSV 表示 hue、saturation、value(色调) 而 HSB 表示 hue、saturation、brightness(明度)。

HSL 和 HSV 二者都把颜色描写叙述在圆柱体内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间是的灰色,绕这个轴的角度相应于“色相”,到这个轴的距离相应于“饱和度”,而沿着这个轴的距离相应于“亮度”,“色调”或“明度”。

这两种表示在用目的上类似,但在方法上有差别。二者在数学上都是圆柱,但 HSV(色相,饱和度,明度)在概念上能够被觉得是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL 在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。注意虽然在 HSL 和 HSV 中“色相”指称同样的性质,它们的“饱和度”的定义是明显不同的。

由于 HSL 和 HSV 是设备依赖的 RGB 的简单变换,(hsl) 或 (hsv) 三元组定义的颜色依赖于所使用的特定红色绿色蓝色加法原色”。每一个独特的 RGB 设备都伴随着一个独特的 HSL 和 HSV 空间。可是 (hsl) 或 (hsv) 三元组在被约束于特定 RGB 空间比方 sRGB 的时候就变成明白的了。

HSV 模型在 1978 年由埃尔维·雷·史密斯创立。

动机

艺术家有时偏好使用 HSV 颜色模型而不选择 RGB 或 CMYK 模型,由于它类似于人类感觉颜色的方式。RGB 和 CMYK 各自是加法原色减法原色模型,以原色组合的方式定义颜色,而 HSV 以人类更熟悉的方式封装了关于颜色的信息:“这是什么颜色?深浅怎样?明暗怎样?”。HSL 颜色空间类似于 HSV,在某些方面甚至比它还好。

[编辑]用途

颜色空间RGB与HSV(HSL)的转换

颜色空间RGB与HSV(HSL)的转换

HSV 色轮同意用户高速的选择众多颜色。

颜色空间RGB与HSV(HSL)的转换

颜色空间RGB与HSV(HSL)的转换

HSV 模型的圆锥表示适合于在一个单一物体中展示整个 HSV 色彩空间。

HSV 模型通经常使用于计算机图形应用中。在用户必须选择一个颜色应用于特定图形元素各种应用环境中,经常使用 HSV 色轮。在当中,色相表示为圆环;能够使用一个独立的三角形来表示饱和度和明度。典型的,这个三角形的垂直轴指示饱和度,而水平轴表示明度。在这样的方式下,选择颜色能够首先在圆环中选择色相,在从三角形中选择想要的饱和度和明度。

HSV 模型的还有一种可视方法是圆锥体。在这样的表示中,色相被表示为绕圆锥中心轴的角度,饱和度被表示为从圆锥的横截面的圆心到这个点的距离,明度被表示为从圆锥的横截面的圆心到顶点的距离。某些表示使用了六棱锥体。这样的方法更适合在一个单一物体中展示这个 HSV 色彩空间;可是因为它的三维本质,它不适合在二维计算机界面中选择颜色。

HSV 色彩空间还能够表示为类似于上述圆锥体的圆柱体,色相沿着圆柱体的外圆周变化,饱和度沿着从横截面的圆心的距离变化,明度沿着横截面究竟面和顶面的距离而变化。这样的表示可能被觉得是 HSV 色彩空间的更精确的数学模型;可是在实际中可区分出的饱和度和色相的级别数目随着明度接近黑色而降低。此外计算机典型的用有限精度范围来存储 RGB 值;这约束了精度,再加上人类颜色感知的限制,使圆锥体表示在多数情况下更有用。

[编辑]HSL 与 HSV 的比較

颜色空间RGB与HSV(HSL)的转换

颜色空间RGB与HSV(HSL)的转换

HSL 和 HSV 色彩空间比較。

HSL 类似于 HSV。对于一些人,HSL 更好的反映了“饱和度”和“亮度”作为两个独立參数的直觉观念,可是对于还有一些人,它的饱和度定义是错误的,由于很柔和的差点儿白色的颜色在 HSL 能够被定义为是全然饱和的。对于 HSV 还是 HSL 更适合于人类用户界面是有争议的。

W3C 的 CSS3 规定声称“HSL 的长处是它对称于亮与暗(HSV 就不是这样)…”,这意味着:

  • 在 HSL 中,饱和度分量总是从全然饱和色变化到等价的灰色(在 HSV 中,在极大值 V 的时候,饱和度从全饱和色变化到白色,这能够被觉得是反直觉的)。
  • 在 HSL 中,亮度跨越从黑色过选择的色相到白色的完整范围(在 HSV 中,V 分量仅仅走一半行程,从黑到选择的色相)。

在软件中,通常以一个线性或圆形色相选择器和在当中为选定的色相选取饱和度和明度/亮度的一个二维区域(通常为方形或三角形)形式提供给用户基于色相的颜色模型(HSV 或 HSL)。通过这样的表示,在 HSV 和 HSL 之间的差别就无关紧要了。可是非常多程序还同意你通过线性滑块或数值录入框来选择颜色的明度/亮度,而对于这些控件通常使用要么 HSL 要么 HSV(而非二者)。HSV 传统上更经常使用。以下是一些样例:

颜色空间RGB与HSV(HSL)的转换

颜色空间RGB与HSV(HSL)的转换

GIMP 支持在 HSV 色彩空间内的选取颜色的多种方法,包含带有色相滑块的色轮和色方。

[编辑]与其它颜色模型的比較

HSV 颜色空间在技术上不支持到辐射測定中測量的物理能量谱密度的一一映射。所以一般不建议做在 HSV 坐标和物理光性质如波长振幅之间的直接比較。

[编辑]形式定义

HSL 和 HSV 在数学上定义为在 RGB 空间中的颜色的 RG 和 B 的坐标的变换。

[编辑]从 RGB 到 HSL 或 HSV 的转换

设 (rgb) 各自是一个颜色的红、绿和蓝坐标,它们的值是在 0 到 1 之间的实数。设 max 等价于 rg 和 b 中的最大者。设 min 等于这些值中的最小者。要找到在 HSL 空间中的 (hsl) 值,这里的 h ∈ [0, 360)是角度的色相角,而 sl ∈ [0,1] 是饱和度和亮度,计算为:

h =\begin{cases}0^\circ & \mbox{if } max = min \\60^\circ \times \frac{g - b}{max - min} + 0^\circ,   & \mbox{if } max = r \mbox{ and } g \ge b \\60^\circ \times \frac{g - b}{max - min} + 360^\circ,   & \mbox{if } max = r \mbox{ and } g < b \\60^\circ \times \frac{b - r}{max - min} + 120^\circ, & \mbox{if } max = g \\60^\circ \times \frac{r - g}{max - min} + 240^\circ, & \mbox{if } max = b\end{cases}
l = \begin{matrix} \frac{1}{2} \end{matrix} (max + min)
s = \begin{cases}0 & \mbox{if } l = 0 \mbox{ or } max = min \\\frac{max-min}{max+min} = \frac{max-min}{2l}, & \mbox{if } 0 \frac{1}{2}\end{cases}

h 的值通常规范化到位于 0 到 360°之间。而 h = 0 用于 max = min 的(就是灰色)时候而不是留下 h 没有定义。

HSL 和 HSV 有相同的色相定义,可是其它分量不同。HSV 颜色的 s 和 v 的值定义例如以下:

s = \begin{cases}0, & \mbox{if } max = 0 \\\frac{max - min}{max} = 1 - \frac{min}{max}, & \mbox{otherwise}\end{cases}
v = max \,

[编辑]从 HSL 到 RGB 的转换

给定 HSL 空间中的 (hsl) 值定义的一个颜色,带有 h 在指示色相角度的值域 [0, 360)中,分别表示饱和度和亮度的s 和 l 在值域 [0, 1] 中,对应在 RGB 空间中的 (rgb) 三原色,带有分别相应于红色、绿色和蓝色的 rg 和 b 也在值域 [0, 1] 中,它们可计算为:

首先,假设 s = 0,则结果的颜色是非彩色的、或灰色的。在这个特殊情况,rg 和 b 都等于 l。注意 h 的值在这样的情况下是没有定义的。

当 s ≠ 0 的时候,能够使用下列过程:[1]

q=\begin{cases}l \times (1+s), & \mbox{if } l < \frac{1}{2} \\l+s-(l \times s), & \mbox{if } l \ge \frac{1}{2}\end{cases}
p = 2 \times l - q \,
h_k = {h \over 360} \,
h 规范化到值域 [0,1)内)
t_R = h_k+\frac{1}{3} \,
t_G = h_k \,
t_B = h_k-\frac{1}{3} \,
\mbox{if } t_C < 0 \rightarrow t_C = t_C + 1.0 \quad \mbox{for each}\,C \in \{R,G,B\}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117895.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • navicat 15激活工具破解方法「建议收藏」

    navicat 15激活工具破解方法,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 华为面试内幕[通俗易懂]

    华为面试内幕[通俗易懂]华为面试内幕–写给想进华为的毕业生的话华为公司的面试过程分为5个环节:一面(技术)、二面(集体)、三面(性格测试)、四面(英语)、五面(综合)。通关者方可录用。这个流程表面上设计挺严谨的,还是某个著名公司设计的流程。但实际上华为

  • Python开发命名规范

    Python开发命名规范引言软件开发中规范的命名能够使你的代码简洁美观,完美的命名规范是一个程序员最基本的技能。下面我先简单说说两种常用的命名方式:驼峰命名法混合使用大小写字母来构成变量和函数的名字,以大写字母代替语句间隔的命名方法。程序员们为了自己的代码能更容易的在同行之间交流,所以多采取统一的可读性比较好的命名方式。大驼峰命名:首字母大写。如CamelCase、JavaScript,HelloWorl…

  • 使用JDBC建立数据库连接的两种方式[通俗易懂]

    使用JDBC建立数据库连接的两种方式[通俗易懂]使用JDBC建立数据库连接的两种方式:1.在代码中使用DriverManager获得数据库连接。这种方式效率低,并且其性能、可靠性和稳定性随着用户访问量得增加逐渐下降。2.使用配置数据源的方式连接数据库,该方式其实质就是在上述方法的基础上增加了数据库连接池,这种方式效率高。数据源连接池的方式连接数据库与在代码中使用DriverManager获得数据库连接存在如下差别:1)数据源连接池的方

  • Editormd的使用——在线编辑和查看文章

    Editormd的使用——在线编辑和查看文章使用Editormd可以方便地在界面上嵌入markdown编辑器,并能够实时预览。先看一下实现效果:编辑文章界面:展示文章界面:用法:首先,到https://pandao.github.io/editor.md/下载Editormd的压缩包,解压到自己的静态资源文件夹下。第二步,引入必要的文件: <linkrel=”stylesheet”href=”/resource/assets/editormd/css/editormd.css”/><linkrel=

  • 【Java SE】————标识符及命名规则和关键字

    【Java SE】————标识符及命名规则和关键字Java标识符:             Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,其中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符.。       标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。      Java标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号