跳转到内容
新建笔记

颜色系

RGB

RGB 模型中,每种颜色出现在红、绿、蓝的原色光谱分量中。该模型基于笛卡尔坐标系。如图 1 所示,RGB 原色值位于 3 个角上;二次色青色,深红色和黄色位于另外三个角上,黑色位于原点处,白色位于里原点最远的角上

图 1 左 RGB 彩色立方体示意图。图 1 右,RGB 24bit 彩色立方体。原点到白色顶点的中轴线是灰度线,r、g、b 三分量相等,强度可以由三分量的向量表示。

用 RGB 来理解色彩、深浅、明暗变化:

img

色彩变化: 三个坐标轴 RGB 最大分量顶点与黄紫青 YMC 色顶点的连线

深浅变化:RGB 顶点和 CMY 顶点到原点和白色顶点的中轴线的距离

明暗变化:中轴线的点的位置,到原点,就偏暗,到白色顶点就偏亮


HSV 色彩空间

HSV 色彩空间如图 2 所示圆锥体。色度表示圆锥角。HSV(Hue, Saturation, Value)是根据颜色的直观特性由 A. R. Smith 在 1978 年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。

这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)

img

色调 H

用角度度量,取值范围为 0° ~ 360°,从红色开始按逆时针方向计算,红色为 0°,绿色为 120°,蓝色为 240°。它们的补色是:黄色为 60°,青色为 180°,品红为 300°;

饱和度 S

饱和度 S 表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为 0,饱和度达到最高。通常取值范围为 0%~ 100%,值越大,颜色越饱和。

明度 V

明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为 0%(黑)到 100%(白)。

image-20240723084402662

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, v
def 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)