You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python获取HSV图像像素的最少波长分布?

HSV像素转波长比例分布的Python实现

处理规则

基于「最少波长数」的核心要求,制定以下转换逻辑:

  • 纯灰度/白色(饱和度S≤0.01):使用红(620nm)、绿(550nm)、蓝(450nm)三个基础波长,各占1/3比例。
  • 高饱和度单色(S≥1):根据色相对应单一波长,比例为1:
    • 0°≤H<30° → 红(620nm)
    • 30°≤H<60° → 橙(590nm)
    • 60°≤H<90° → 黄(570nm)
    • 90°≤H<150° → 绿(550nm)
    • 150°≤H<210° → 青(500nm)
    • 210°≤H<270° → 蓝(450nm)
  • 高饱和度品红(270°≤H<360°):混合红(620nm)和蓝(450nm),比例随色相线性过渡:
    • 红比例 = (H - 270) / 90
    • 蓝比例 = (360 - H) / 90
  • 低饱和度(0<S<1):拆分「彩色部分(占比S)」和「灰度部分(占比1-S)」,灰度部分拆为三个基础波长各占(1-S)/3,彩色部分按上述单色/品红规则分配比例。

Python代码实现

def hsv_to_wavelength_distribution(h, s, v):
    # 初始化波长分布字典
    dist = {}
    # 处理纯灰度/白色情况
    if s <= 0.01:
        dist[620] = 1 / 3
        dist[550] = 1 / 3
        dist[450] = 1 / 3
        return dist
    
    # 拆分彩色与灰度部分的比例
    color_ratio = s
    gray_ratio = 1 - s
    # 灰度部分的三个基础波长初始比例
    gray_base = gray_ratio / 3
    dist[620] = gray_base
    dist[550] = gray_base
    dist[450] = gray_base
    
    # 根据色相分配彩色部分比例
    if 0 <= h < 30:
        # 红色
        dist[620] += color_ratio
    elif 30 <= h < 60:
        # 橙色
        dist[590] = color_ratio
    elif 60 <= h < 90:
        # 黄色
        dist[570] = color_ratio
    elif 90 <= h < 150:
        # 绿色
        dist[550] += color_ratio
    elif 150 <= h < 210:
        # 青色
        dist[500] = color_ratio
    elif 210 <= h < 270:
        # 蓝色
        dist[450] += color_ratio
    elif 270 <= h < 360:
        # 品红色:混合红与蓝
        red_part = (h - 270) / 90 * color_ratio
        blue_part = (360 - h) / 90 * color_ratio
        dist[620] += red_part
        dist[450] += blue_part
    
    # 修正浮点误差,确保比例总和严格为1
    total = sum(dist.values())
    for wavelength in dist:
        dist[wavelength] /= total
    
    return dist

测试示例

  • 纯蓝色(H=240, S=1, V=0.8):返回 {450: 1.0}
  • 品红色(H=300, S=1, V=0.5):返回 {620: 0.3333333333333333, 450: 0.6666666666666666}
  • 白色(H=0, S=0, V=1):返回 {620: 0.3333333333333333, 550: 0.3333333333333333, 450: 0.3333333333333333}
  • 低饱和度红色(H=10, S=0.5, V=0.7):返回 {620: 0.6666666666666666, 550: 0.16666666666666666, 450: 0.16666666666666666}

内容的提问来源于stack exchange,提问作者Aromik AR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:18:13