How to make conversion between RGB and HSV? [Python sourcecode]

I get following codes from a Japanese Ghost's Blog, so I neglect the original URL for my hate of them.

RGB => HSV

def RGB2HSV( r, g, b ):
    r, g, b = map( float, (r,g,b ) )
    if r == g and g == b:
        ma = r
        mi = r
        h = 0
        v = r
    elif r > g and r > b:
        ma = r
        mi = min( g , b )
        h = 60 * ( g - b ) / ( ma - mi ) + 0
    elif g > b and g >= r:
        ma = g
        mi = min( b , r )
        h = 60 * ( b - r ) / ( ma - mi ) + 120
    elif b >= r and b >= g:
        ma = b
        mi = min( r , g )
        h = 60 * ( r - g ) / ( ma - mi ) + 240
    else:
        print "Error." 

    if ma == 0:
        return 0, 0, 0
    
    s = (ma - mi) / ma
    v = ma

    return h, s, v


HSV => RGB

def HSV2RGB( h, s, v ):
    hi = int(h / 60) % 6
    f = h / 60 - hi
    p = v * ( 1 - s )
    q = v * ( 1 - f * s )
    t = v * ( 1 - ( 1 - f ) * s )

    if hi == 0:
        r = int(round( v ))
        g = int(round( t ))
        b = int(round( p ))
    elif hi == 1:
        r = int(round( q ))
        g = int(round( v ))
        b = int(round( p ))
    elif hi == 2:
        r = int(round( p ))
        g = int(round( v ))
        b = int(round( t ))
    elif hi == 3:
        r = int(round( p ))
        g = int(round( q ))
        b = int(round( v ))
    elif hi == 4:
        r = int(round( t ))
        g = int(round( p ))
        b = int(round( v ))
    elif hi == 5:
        r = int(round( v ))
        g = int(round( p ))
        b = int(round( q ))
        
    return r, g, b
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值