RGB2HSV

 

网上的转换方式千奇百怪,让我很是郁闷,我贴一个靠谱的函数
// R, G, B:[0..255],integer
// H:[0, 360),double, degrees around color circle
// S:[0, 1], double, 0(shade of gray) to 1(pure color)
// V:[0, 1], double, 0(black) to 1(white)
void  RGB2HSV( int  R,  int  G,  int  B,  double   & H,  double   & S,  double   & V)
{
    
int Max = max(max(R, G), B);
    
int Min = min(min(R, G), B);
    
int Delta = Max - Min;

    
if(Max == 0)
        S 
= 0.0;
    
else
        S 
= (double)Delta/Max;

    
if(abs(S)<FLT_EPSILON)
        H 
= 0.0;                       //当S为0时,H无意义, 但可以指定为0
    else
    
{
        
if(R == Max)                   //yellow to magenta
            H = 60*(G-B)/Delta;
        
else if(G == Max)              //cyan to yellow
            H = 120+60*(B-R)/Delta;
        
else if(B == Max)               //magenta to cyan
            H = 240+60*(R-G)/Delta;
    }


    
if(H<0.0)
        H 
= 360.0 + H;
    
if(H>360.0)
        H
-=360;

    V 
= Max/255.0;
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值