RGB和HSV颜色空间

RGB颜色空间

   RGB(red,green,blue)颜色空间最常用的用途就是显示器系统,彩色阴极射线管,彩色光栅图形的显示器都使用R、G、B数值来驱动R、G、B电子枪发射电子,并分别激发荧光屏上的R、G、B三种颜色的荧光粉发出不同亮度的光线,并通过相加混合产生各种颜色;扫描仪也是通过吸收原稿经反射或透射而发送来的光线中的R、G、B成分,并用它来表示原稿的颜色。RGB色彩空间称为与设备相关的色彩空间,因为不同的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同的色彩显示结果。显示器和扫描仪使用的RGB空间与CIE 1931RGB真实三原色表色系统空间是不同的,后者是与设备无关的颜色空间。btw:Photoshop的色彩选取器(Color Picker)。可以显示HSB、RGB、LAB和CMYK色彩空间的每一种颜色的色彩值。

根据三基色原理,用基色光单位来表示光的量,则在RGB颜色空间,任意色光F都可以用R、G、B三色不同分量的相加混合而成:

   F=r[R]+g[G]+b[B]

RGB颜色空间还可以用一个三维的立方体来描述。



我们可知自然界中任何一种色光都可由R、G、B三基色按不同的比例相加混合而成,当三基色分量都为0(最弱)时混合为黑色光;当三基色分量都为k(最强)时混合为白色光。任一颜色F是这个立方体坐标中的一点,调整三色系数r、g、b中的任一系数都会改变F的坐标值,也即改变了F的色值。RGB颜色空间采用物理三基色表示,因而物理意义很清楚,适合彩色显像管工作。然而这一体制并不适应人的视觉特点。因而,产生了其他不同的颜色空间表示法。

 

HSV颜色空间

   HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1。它包含RGB模型中的R=1,G=1,B=1三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于角度0°,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180°。饱和度S取值从0到1,所以圆锥顶面的半径为1。HSV颜色模型所代表的颜色域是CIE色度图的一个子集,这个模型中饱和度为百分之百的颜色,其纯度一般小于百分之百。在圆锥的顶点(即原点)处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处S=0,V=1,H无定义,代表白色。从该点到原点代表亮度渐暗的灰色,即具有不同灰度的灰色。对于这些点,S=0,H的值无定义。可以说,HSV模型中的V轴对应于RGB颜色空间中的主对角线。在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。HSV模型对应于画家配色的方法。画家用改变色浓和色深的方法从某种纯色获得不同色调的颜色,在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时加入不同比例的白色,黑色即可获得各种不同的色调。

HSV颜色空间可以用一个圆锥空间模型来描述。



原文地址:http://blog.sina.com.cn/s/blog_474fc3c901009g7q.html


### RGBHSV 颜色空间转换公式方法 RGB(Red, Green, Blue) HSV(Hue, Saturation, Value)是两种常用的颜色表示方式。RGB 是基于笛卡尔坐标系的立方体模型,而 HSV 是基于圆柱坐标系的颜色模型,能够更直观地表达颜色的色调、饱亮度。 #### 转换步骤 1. **归一化 RGB 值** RGB 通常使用 0~255 的整数范围,但在计算 HSV 时需要将其归一化为 [0, 1] 区间: $$ R' = \frac{R}{255},\quad G' = \frac{G}{255},\quad B' = \frac{B}{255} $$ 2. **计算最大值最小值以及差值** 分别找出三个分量的最大值最小值,并计算它们之间的差值: $$ C_{max} = \max(R', G', B'),\quad C_{min} = \min(R', G', B'),\quad \Delta = C_{max} - C_{min} $$ 3. **计算 Hue (H)** Hue 的计算依赖于最大值所在的颜色通道: $$ H = \begin{cases} \left( \frac{G' - B'}{\Delta} \right) \mod 6 & \text{if } C_{max} = R' \\ \left( \frac{B' - R'}{\Delta} + 2 \right) & \text{if } C_{max} = G' \\ \left( \frac{R' - G'}{\Delta} + 4 \right) & \text{if } C_{max} = B' \end{cases} $$ 最后将结果乘以 60 得到角度形式的 Hue 值(单位:度),若 $\Delta = 0$,则 $H = 0$。 4. **计算 Saturation (S)** Saturation 的计算分为两种情况: $$ S = \begin{cases} 0 & \text{if } C_{max} = 0 \\ \frac{\Delta}{C_{max}} & \text{otherwise} \end{cases} $$ 5. **计算 Value (V)** Value 就是最大颜色分量的归一化值: $$ V = C_{max} $$ #### 示例代码(Python) 以下是一个 Python 函数实现 RGBHSV 的转换: ```python def rgb_to_hsv(r, g, b): r, g, b = r / 255.0, g / 255.0, b / 255.0 c_max = max(r, g, b) c_min = min(r, g, b) delta = c_max - c_min if delta == 0: h = 0 elif c_max == r: h = ((g - b) / delta) % 6 elif c_max == g: h = ((b - r) / delta) + 2 else: h = ((r - g) / delta) + 4 h *= 60 if h < 0: h += 360 s = 0 if c_max == 0 else delta / c_max v = c_max return h, s, v ``` #### 应用场景 - **图像处理**:HSV 更适合用于颜色识别与分割任务,例如在计算机视觉中检测特定颜色的对象。 - **动画与可视化**:在数据可视化或动画制作中,HSV 提供了更自然的颜色渐变控制[^4]。 - **移动开发**:Android 提供了 `RGBToHSV` 方法来支持颜色空间转换[^2]。 #### 注意事项 - 在某些实现中,Hue 可能被限制在 [0, 360] 或 [0, 1] 范围内。 - 当 $\Delta = 0$ 时,颜色是灰度色,此时 Hue 没有定义,通常设为 0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值