【RGB=HSI】单片机控制RGB单灯与HSI互转算法

本文记录了作者在单片机项目中实现RGB补光灯控制时,遇到的HSI颜色模型转换问题。通过自行推算得出HSI转RGB函数,并在大佬帮助下优化了RGB转HSI的算法。介绍了HSI模型的H(色调)、S(饱和度)、I(强度)三个参数。代码实现采用C语言,注意到了浮点数处理和精度问题,欢迎探讨优化方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做一个RGB补光灯的小玩意儿,项目上有一个OLED屏幕显示当前灯光的HSI参数,对于HSI我是完全陌生的,由于时间紧任务重,我也没想过去百度一下HSI是个啥,直接拿着样品测试了一组参数,自己去演算了一个HSI转RGB的函数,虽然花了不少时间,还存在一点误差,误差主要是范围的问题,RGB的范围应该是0-255,我演算的时候为了方便计算将范围设置为0-100,最终结果算是好的吧。

但是在RGB转HSI的时候,已经没有时间去推算了,这才想起来去请教身边的一位大佬,这才知道HSI颜色模型是个啥,还给我普及了这个互转算法,拿来给我优化使用,在这记录一下优化后C语言写法,随便参考一下百科对HSI的介绍,加深理解。

HSI〔Hue-Saturation-Intensity(Lightness),HSI或HSL〕颜色模型用H、S、I三参数描述颜色特性,其中H定义颜色的频率,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度。

HSI 颜色模型中的H 分量是确定颜色的主要因素,当它发生变化时色调值也将变化;S 分量越大(接近1),颜色越纯,S 分量越小(接近0),颜色越接近纯灰色

hsi2rgb函数是一个将色度-饱度-亮度(Hue Saturation Intensity)颜色空间转换为红绿蓝(RGB)颜色空间的工具,在图像处理色彩管理中常用于颜色空间变换。HSI色彩模型是一种非线性的表示法,其中H代表色调(0到360度),S代表饱度(0%到100%),I代表亮度(0%到100%)。而RGB模型则是线性三原色系统。 这个函数的基本原理是通过计算插值来确定对应于给定HSI值的RGB分量。具体的步骤可能会涉及查找HSV到RGB的转换矩阵,然后应用公式进行转换。然而,详细的数学公式会比较复杂,通常包括三角函数一些特定的颜色映射规则。 在这里,由于这是一个技术性的转换过程,直接给出代码可能较长,但大体步骤可以概括为: 1. 将HSI色调转化为弧度(0到2π) 2. 计算对应的RGB比例 3. 根据饱度调整RGB的中间值 4. 应用亮度值 如果你需要实现这样的转换,网上有许多现成的代码库或者算法可供参考,例如Python的PIL库就有内置的HSI to RGB转换方法。以下是伪代码的一个示例: ```python function rgb = hsi2rgb(h, s, i): if s == 0: # 饱度为零,直接返回灰度 r = g = b = i * 255 else: h_prime = (h * 6) % 360 p = i * (1 - s) q = i * (1 - s * h_prime / 60) t = i * (1 - s * (60 - h_prime) / 60) if h_prime < 60: r, g, b = i, q, p elif h_prime < 120: r, g, b = q, i, p elif h_prime < 180: r, g, b = p, i, q elif h_prime < 240: r, g, b = p, q, i elif h_prime < 300: r, g, b = q, p, i else: r, g, b = i, p, q r, g, b = map(lambda x: x + (i - p) * s, [r, g, b]) # 转换为0-255范围并取整 r, g, b = int(r * 255), int(g * 255), int(b * 255) return [r, g, b] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值