系列文章目录
第二章 主色提取之颜色空间转化
目录
系列文章目录
文章目录
前言
一、HSV 和 RGB 颜色空间
二、颜色转化
1. RGB to HSV
2. HSV to RGB
三、 完整代码
前言
HSV 颜色空间和 RGB 颜色空间的转化。
一、HSV 和 RGB 颜色空间
RGB颜色使用的最多,分别为红色(R),绿色(G)和蓝色(B)。
HSV颜色中的 H( hue) 表示色 调,由颜色名称来辨别,如红、橙、绿,它用角度度量,从-180° 到 180°,或从 0°到 360°; S( saturation) 表示色度或饱和度,指颜色 的深浅,例如同 样 是 红 色,也会因浓度不同分为深红和浅红,S 用百分比来度量,从 0% 到完全饱和的 100% ; V( value) 表示亮 度,指颜色的明暗程度,通常用百分比来度量,从黑 0% 到白100% 。
二、颜色转化
1. RGB to HSV
RGB 到 HSV 还是比较简单实现的,
在计算公式前,有三个假设:
- 设 (r, g, b) 的值是在 0 到 1 之间的实数
- 设 max 等于 r, g, b 中的最大者
- 设 min 等于 r, g, b 中的最小者
公式如下图:
代码如下:
def RGB2HSV(r,g,b):
r, g, b = r / 255, g / 255, b / 255
ma = max(r, g, b)
mi = min(r, g, b)
diff = ma - mi
if ma == mi:
h = 0
elif ma == r and g >= b:
h = 60 * ((g - b)/diff) + 0
elif ma == r and g < b:
h = 60 * ((g - b)/diff) + 360
elif ma == g:
h = 60 * ((b - r)/diff) + 120
elif ma == b:
h = 60 * ((r - g)/diff) + 240
if ma == 0:
s = 0
else:
s = diff / ma
v = ma
return h, s, v
2. HSV to RGB
HSV 转化为 RGB 相对于上面来说是要难一些的,
要注意两点:
1 参数输入范围 h(0~360), s(0~100), v(0~100),所以要把 s, v 缩放到0~1之间
2 转换结果R(0~100),G(0~100),B(0~100)
公式如下:
实现代码如下:
def HSV2RGB(h, s, v):
s, v = s / 100, v /100
i = round(h / 60) % 6
f = (h / 60) - i
p = v * (1 - s)
q = v * (1 - f * s)
t = v * (1 - (1 - f) * s)
R, G, B = 0, 0, 0
if i == 0:
R, G, B = v, t, p
elif i == 1:
R, G, B = q, v, p
elif i == 2:
R, G, B = p, v, t
elif i == 3:
R, G, B = p, q, v
elif i == 4:
R, G, B = t, p, v
elif i == 5:
R, G, B = v, p, q
r, g, b = round(R * 255), round(G * 255), round(B * 255)
return r, g, b
三、 完整代码
完整代码可以在GitHub上下载,如果感兴趣,不妨给我个星呀,哈哈。
连接:GitHub - Liangliangb/Image-main-color-extraction: Use the k-means algorithm to extract the dominant color of the picture.Use the k-means algorithm to extract the dominant color of the picture. - GitHub - Liangliangb/Image-main-color-extraction: Use the k-means algorithm to extract the dominant color of the picture.https://github.com/Liangliangb/Image-main-color-extraction.git