• 使用python获得N个区分度较高的RGB颜色值


     获得任意N个区分度最高的RGB颜色值是一个经典的问题,之前在做一些可视化的东西时需要解决这个问题。首先去网上找了一些方法,未果,于是想自己来搞,心里的想法是,先给出一个距离函数用来度量两个RGB颜色值的区分度,然后再通过随机和贪心的方式依次获得N个颜色值。如果要这样搞的话,距离函数的定义就非常关键了,这就避免不了要去看一些学术论文,想着就有点畏惧,又要查文献、读文献,感觉要花好几天时间。于是就先放下了,用随机生成颜色的方法来解决,但是效果很不好。今天又认真的查了一些资料,发现10年前,已经有人在Stack Overflow上问过了,其中第二个回答很全面,获赞最多,既给出了一些文献研究,又在N比较小的情况下给出了一些简单的解决方案。第一个回答的获赞也不少,而且非常简单,在这里,我就选了第一个回答用python实现了一下,其思路是先通过随机的方式获得N个区分度比较高的HLS颜色值,然后再将其转换为RGB颜色,代码如下所示(GitHub地址)。

    import colorsys
    import random

    def get_n_hls_colors(num):
    hls_colors = []
    i = 0
    step = 360.0 / num
    while i < 360:
    h = i
    s = 90 + random.random() * 10
    l = 50 + random.random() * 10
    _hlsc = [h / 360.0, l / 100.0, s / 100.0]
    hls_colors.append(_hlsc)
    i += step

    return hls_colors

    def ncolors(num):
    rgb_colors = []
    if num < 1:
    return rgb_colors
    hls_colors = get_n_hls_colors(num)
    for hlsc in hls_colors:
    _r, _g, _b = colorsys.hls_to_rgb(hlsc[0], hlsc[1], hlsc[2])
    r, g, b = [int(x * 255.0) for x in (_r, _g, _b)]
    rgb_colors.append([r, g, b])

    return rgb_colors
    --------------------- 

  • 相关阅读:
    ie8 不能加载dll的问题解决
    Delphi 释放数组中的数据
    CSS: 首字母字体变大时下划线不对齐的解决方法
    谈谈一些有趣的CSS题目(十三)-- 巧妙地制作背景色渐变动画!
    吃透css3之3d属性--perspective和transform
    vue-cli中的webpack配置
    转载 webstrom识别 React语法
    CSS 布局整理(************************************************)
    巧用chrome开发者工具
    详解Webpack2的那些路径
  • 原文地址:https://www.cnblogs.com/hyhy904/p/10977554.html
Copyright © 2020-2023  润新知