RGB
RGB 模型中,每种颜色出现在红、绿、蓝的原色光谱分量中。该模型基于笛卡尔坐标系。如图 1 所示,RGB 原色值位于 3 个角上;二次色青色,深红色和黄色位于另外三个角上,黑色位于原点处,白色位于里原点最远的角上
图 1 左 RGB 彩色立方体示意图。图 1 右,RGB 24bit 彩色立方体。原点到白色顶点的中轴线是灰度线,r、g、b 三分量相等,强度可以由三分量的向量表示。
用 RGB 来理解色彩、深浅、明暗变化:

色彩变化: 三个坐标轴 RGB 最大分量顶点与黄紫青 YMC 色顶点的连线
深浅变化:RGB 顶点和 CMY 顶点到原点和白色顶点的中轴线的距离
明暗变化:中轴线的点的位置,到原点,就偏暗,到白色顶点就偏亮
HSV 色彩空间
HSV 色彩空间如图 2 所示圆锥体。色度表示圆锥角。HSV(Hue, Saturation, Value)是根据颜色的直观特性由 A. R. Smith 在 1978 年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)

色调 H
用角度度量,取值范围为 0° ~ 360°,从红色开始按逆时针方向计算,红色为 0°,绿色为 120°,蓝色为 240°。它们的补色是:黄色为 60°,青色为 180°,品红为 300°;
饱和度 S
饱和度 S 表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为 0,饱和度达到最高。通常取值范围为 0%~ 100%,值越大,颜色越饱和。
明度 V
明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为 0%(黑)到 100%(白)。

def rgb_to_hsv(r, g, b): r, g, b = r/255.0, g/255.0, b/255.0 max_val = max(r, g, b) min_val = min(r, g, b) difference = max_val-min_val
if max_val == min_val: h = 0 elif max_val == r: h = (60 * ((g-b)/difference) + 360) % 360 elif max_val == g: h = (60 * ((b-r)/difference) + 120) % 360 elif max_val == b: h = (60 * ((r-g)/difference) + 240) % 360
if max_val == 0: s = 0 else: s = (difference/max_val)*100
v = max_val*100 return h, s, vdef hsv_to_rgb(h, s, v): s = s / 100.0 v = v / 100.0 c = s * v x = c * (1 - abs((h / 60.0) % 2 - 1)) m = v - c
if 0 <= h < 60: r, g, b = c, x, 0 elif 60 <= h < 120: r, g, b = x, c, 0 elif 120 <= h < 180: r, g, b = 0, c, x elif 180 <= h < 240: r, g, b = 0, x, c elif 240 <= h < 300: r, g, b = x, 0, c elif 300 <= h < 360: r, g, b = c, 0, x else: r, g, b = 0, 0, 0
r, g, b = (r + m) * 255, (g + m) * 255, (b + m) * 255 return int(r), int(g), int(b)