【主色提取】HSV 颜色空间与 RGB 颜色空间互相转化的公式和代码

系列文章目录

 


第二章 主色提取之颜色空间转化

目录

系列文章目录

文章目录

前言

一、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%)
2 转换结果R(0~255),G(0~255),B(0~255),如需转换到0~100,只需把后面的乘255改成乘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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月23日
下一篇 2023年12月23日

相关推荐