计算机中的颜色——HSV表示方法
发布日期:2021-07-16 17:36:06 浏览次数:1 分类:技术文章

本文共 1662 字,大约阅读时间需要 5 分钟。

在计算机中的实际应用中,除了RGB表示方法外,还有一种用的比较多的表示方法就是HSV(又称HSB)表示方法。它把颜色分为三个参量,一个是色相Hue,具体表示在色相环上的一种纯色,一个是饱和Saturation,具体表示纯色在颜色中的百分比,当S=1时,表示颜色最纯,当S=0时,表示灰度值。一个是亮度Value,表示颜色的亮度,当V=0时,表示黑色。

HSV颜色系统在不破坏图像结构的基础上更该颜色方面起着不小的作用。比方说,我们在网上看到一种按钮设计觉得非常好,但是他的颜色不符合我们的要求,我们可以模仿他的样式,自己重新制作一个按钮,不过由于美术功底不足,无论怎么调整都做不出原来的感觉来。原因就是原来的按钮各种颜色搭配是有一定的道理的,自己重新选择颜色感觉就是不协调。我们可以利用HSV,直接更改按钮的各个颜色的色相值,这样由于是整体更改颜色的色相值,各种颜色搭配还是比较协调的。

下面这个图右边的包是左边的包通过更改色相值实现的。

 

以下内容来源于维基百科,有删减。

HSV(也叫做 HSB)是对RGB 色彩空间中点的有关系的表示,它们尝试描述比 RGB 更准确的感知颜色联系,并仍保持在计算上简单。HSL 表示 hue(色相)、saturation(饱和度)、lightness(亮度),HSV 表示 hue saturationvalue HSV 二者都把颜色描述在圆柱体内的点,这个圆柱的中心轴取值为自底部的黑色到顶部的白色而在它们中间是的灰色,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的距离对应于“亮度”,“value”或“明度”。艺术家有时偏好使用 HSV 颜色模型而不选择 RGB CMYK 模型,因为它类似于人类感觉颜色的方式。RGB CMYK 分别是加法原色和减法原色模型,以原色组合的方式定义颜色,而 HSV 以人类更熟悉的方式封装了关于颜色的信息:“这是什么颜色?深浅如何?明暗如何?”。

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

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

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

RGB HSV 的转换

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

 

 

 

 

 

HSV RGB 的转换

类似的,给定在 HSV (h, s, v) 值定义的一个颜色,带有如上的 h,和分别表示饱和度和明度的 s v 变化于 0 1 之间,在 RGB 空间中对应的 (r, g, b) 三原色可以计算为:

 

转载地址:https://blog.csdn.net/grenet/article/details/4708007 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:计算机中的颜色——纯色、色相色
下一篇:计算机中的颜色——VB2005中的Color结构

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月24日 14时52分41秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php存储过程数据过大报错,针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例... 2019-04-21
oracle block media recovery,Oracle OCP 1Z0 053 Q401(Block Media Recovery) 2019-04-21
oracle 错误01190,ORA-01189及 ORA-01190错误的模拟及解决 2019-04-21
linux进程树查看,linux:使用pstree和tree查看进程树和目录树 2019-04-21
linux进去运行级别目录代码,Linux实用指令(1):运行级别&找回密码&帮助指令&文件目录类... 2019-04-21
linux的sh脚本语法,sh_脚本基本语法 2019-04-21
linux更换桌面图,桌面应用|在 Linux 上安装必应桌面墙纸更换器 2019-04-21
linux时间戳反转,Unix时间戳到LDAP时间戳 2019-04-21
华为设备linux ssh登录失败,S5700通过SSH方式登录设备失败的处理案例 2019-04-21
Linux环境中第一行dpa,nvdimm 2019-04-21
linux数据自动备份软件,linux自动备份,自动导入mysql数据 2019-04-21
linux中svn使用方法,Linux下svn使用方法 2019-04-21
Linux_arm_启动_c语言部分详解,[原创]Linux arm 启动 c语言部分详解第一讲(from Start kernel)... 2019-04-21
iphone连接linux系统电脑,为什么iphone连不上电脑 多种解决方法【图文教程】 2019-04-21
linux使用shell函数扩充命令,Linux Shell系列教程之(十五) Shell函数简介 | Linux大学... 2019-04-21
c语言怎么输入最大公约数,C语言 输入两个数求最大公约数问题,谢谢指点 2019-04-21
龟兔赛跑c语言程序设计题,模拟龟兔赛跑(很笨拙的代码) 2019-04-21
c语言中担任翻译工作程序成为,C语言,翻译一下这个程序,每条都翻译一下 2019-04-21
c语言程序设计黑皮书自学,单片机程序调试黑皮书 2019-04-21
c语言上机+pdf,全国计算机等级考试三级C语言上机.pdf 2019-04-21