Python で手軽に使えて色々便利なモジュールといえばそのうちの一つは PIL.
numpy と組み合わせるとさくっと色々できたりする.
僕 「!! そうだ RGB と HSV 変換したいな」
僕 「そういえばどう変換するんだっけ」
https://en.wikipedia.org/wiki/HSL_and_HSV
僕「なるほど(ジッサイ詳しい」
↓
書いた
#!/usr/bin/env python3
# coding: utf-8
# see : https://en.wikipedia.org/wiki/HSL_and_HSV
"""
r,g,b : [0,1]
h : hue : [0,360)
s,v,l : [0,1]
"""
def rgb_to_hue(r,g,b):
M = max(r,g,b)
m = min(r,g,b)
c = M - m # chroma.
if c == 0:
return None # undefined.
elif r == M:
h2 = (g-b)/c % 6
elif g == M:
h2 = (b-r)/c + 2
else:
h2 = (r-g)/c + 4
return 60*h2
def rgb_to_hsv(r,g,b):
hue = rgb_to_hue(r,g,b)
c = max(r,g,b) - min(r,g,b)
val = max(r,g,b)
sat = 0 if c == 0 else c/val
return(hue,sat,val)
def hsv_to_rgb(h,s,v):
"""
h <- [0,360), s <- [0,1], v <- [0,1]
=> (r,g,b) <- [0,1]**3
"""
c = v*s # chroma
m = v-c
if h is None:
return(m,m,m)
h2 = h/60
x = c*(1-abs(h2 % 2 -1))
h2 = int(h2)
if h2 == 0:
(r1,g1,b1) = (c,x,0)
elif h2 == 1:
(r1,g1,b1) = (x,c,0)
elif h2 == 2:
(r1,g1,b1) = (0,c,x)
elif h2 == 3:
(r1,g1,b1) = (0,x,c)
elif h2 == 4:
(r1,g1,b1) = (x,0,c)
elif h2 == 5:
(r1,g1,b1) = (c,0,x)
return (r1+m, g1+m, b1+m)
素直に書き写しただけやけどこれで動く(はず).僕「ついでに HSL の方も書くか」
僕「ちょっと待てよ…」(グーグル
>>>> http://docs.python.org/3.3/library/colorsys.html <<<<
>>>>> Conversions between color systems <<<<<
>>>>>> 標準ライブラリ <<<<<<
ありがとうございました.
No comments:
Post a Comment