使用python獲得N個區分度較高的RGB顏色值

2021-09-22 23:00:32 字數 1105 閱讀 1507

獲得任意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]

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)]

return rgb_colors

使用Python獲得本機IP位址

使用撥號上網的話,一般都有乙個本地ip和乙個外網ip,使用python可以很容易的得到這兩個ip 使用gethostbyname和gethostbyname ex兩個函式可以實現 import socket localip socket.gethostbyname socket.gethostnam...

python 隨機選取n個元素

參考鏈結 import random data a b c d e f g h random.choice data 隨機選取乙個元素import random data a b c d e f g h sample num 5 random.sample data,sample num 結果 a ...

Python 尋找第n個尼爾森係數

尋找第n個默尼森數。格式如下 def prime num def monisen no return print monisen input 此處不需要自己輸入,只要寫這樣一條語句即可,主要完成monisen 函式 print monisen int input in python 3.x 5分 題...