RGB565 转 HSV C语言实现

								**RGB565 转 HSV  C语言实现**

在这里插入图片描述
在这里插入图片描述

/**
  * @brief  RGB 转 HSV  
  * @param  [IN]   rgb565
  * @param  [OUT]  *H   分量     范围 0 ~ 360°
  * @param  [OUT]  *S   分量     范围 0 ~ 100
  * @param  [OUT]  *V   分量     范围 0 ~ 252
  */
void Img_Rgb565ToHSV(uint16_t *uspRgb565, int16_t *H, int16_t *S, int16_t *V)
{
    uint16_t usMax, usMin, usDx;
    uint16_t usR, usG, usB;
    uint16_t *uspRgb = uspRgb565;
    
    usR = (uint8_t)((*uspRgb & 0xF800) >> 8); /* 提取R通道 */
    usG = (uint8_t)((*uspRgb & 0x7E0)  >> 3); /* 提取G通道 */
    usB = (uint8_t)((*uspRgb & 0x001F) << 3); /* 提取B通道 */
    
    usMax = ((usR > usG) ? usR : usG);
    if(usB > usMax)
    {
        usMax = usB;
    }
    usMin = ((usR < usG) ? usR : usG);
    if(usB < usMin)
    {
        usMin = usB;
    }
    usDx = usMax - usMin;
    
    if(usDx != 0)
    {
        /* H */
        if(usR == usMax)
        {
            *H = 60 * (usG - usB) / usDx;
        }
        else if(usG == usMax)
        {
            *H = 60 * (usB - usR) / usDx + 120;
        }
        else
        {
            *H = 60 * (usR - usG) / usDx + 240;
        }

        if(*H < 0)
        {
            *H += 360;
        }
        
        /* S */
        *S = (usDx * 100) / usMax;
        
    }else
    {
        /* H */
        *H = 0;
        /* S */
        *S = 0;
    }
    
    /* V */
    *V = usMax;
}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值