RGB空间与HSV空间的相互转换(C++实现,修正网上大多数的代码错误)

本文介绍了一种将RGB颜色空间转换为HSV颜色空间的算法实现。该算法详细解释了如何计算HSV值,并提供了具体的代码示例。适用于需要进行颜色空间转换的应用场景。
void Rgb2Hsv(float R, float G, float B, float& H, float& S, float&V)
{
     // r,g,b values are from 0 to 1
    // h = [0,360], s = [0,1], v = [0,1]
    // if s == 0, then h = -1 (undefined)
    float min, max, delta,tmp;
    tmp = R>G?G:R;
    min = tmp>B?B:tmp;
    tmp = R>G?R:G;
    max = tmp>B?tmp:B;
    V = max; // v
    delta = max - min;
    if( max != 0 )
        S = delta / max; // s
    else
    {
        // r = g = b = 0 // s = 0, v is undefined
        S = 0;
        H = 0;
        return;
    }
    if (delta == 0){
        H = 0;
        return;
    }
    else if(R == max){
        if (G >= B)
            H = (G - B) / delta; // between yellow & magenta
        else
            H = (G - B) / delta + 6.0;
    }
    else if( G == max )
        H = 2.0 + ( B - R ) / delta; // between cyan & yellow
    else if (B == max)
        H = 4.0 + ( R - G ) / delta; // between magenta & cyan
    H *= 60.0; // degrees
}

源地址:http://blog.csdn.net/shijun_zhang/article/details/6525388

转载于:https://www.cnblogs.com/lanye/p/4173362.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值