HSV颜色空间转RGB(C语言代码),ESP32使用RMT驱动WS2812B,七彩流光灯光效果
HSV(Hue
, Saturation
, Value
) 模型中,颜色的参数分别是:色调(H)
,饱和度(S)
,明度(V)
。它更类似于人类感觉颜色的方式,颜色?深浅?明暗?通过这种方式可以很直观的改变渲染效果。
RGB
在生活最为常用,显示屏
、RGB-LED
等发光显示器件,最后都会用RGB的方式去表现。但RGB在使用过程中却有许多麻烦,例如明明两种颜色相近,但RGB的参数有时却天差地别。并且更改RGB参数时很容易影响亮度。
1. 计算机应用中的HSV色轮
HSV表达颜色有3个参数:
色调(Hue)
:单位°,范围0~360。(负责调整颜色,0°-红色,120°-绿色,240°-蓝色,以此类推)饱和度(Saturation)
:单位%,范围0~100。(饱和度高,颜色深而艳;饱和度低,颜色浅而发白)明度(Value)
:单位%,范围0~100。(控制明暗,明度越高直观感受亮度越亮,越低亮度越低甚至发黑)
注意:HSV(色调(H)
,饱和度(S)
,明度(V)
)有别于HSL(色调(H)
,饱和度(S)
,亮度(L)
)
2. Hue色调
通常在编写代码中,饱和度
、明度
大多不是重点,一般直接拉到最高,或者保持一个固定的值。时常需要变动的是Hue色调
,也就是直观的颜色。用 0~360°
来表示各种颜色。
3. HSV转RGB(C语言代码)
ESP32完整工程:easyio库 中的Demo - 20_RMT_1WIRE_WS2812B
下面这段代码摘自乐鑫ESP32的SDK-Demo led_strip
,简洁易用。
不足的地方是输入输出都是整形
,如需浮点,请自行将里面的参数都改为float
或double
。
/*** @brief 将HSV颜色空间转换为RGB颜色空间* - 因为HSV使用起来更加直观、方便,所以代码逻辑部分使用HSV。但WS2812B RGB-LED灯珠的驱动使用的是RGB,所以需要转换。* * @param h HSV颜色空间的H:色调。单位°,范围0~360。(Hue 调整颜色,0°-红色,120°-绿色,240°-蓝色,以此类推)* @param s HSV颜色空间的S:饱和度。单位%,范围0~100。(Saturation 饱和度高,颜色深而艳;饱和度低,颜色浅而发白)* @param v HSV颜色空间的V:明度。单位%,范围0~100。(Value 控制明暗,明度越高亮度越亮,越低亮度越低)* @param r RGB-R值的指针* @param g RGB-G值的指针* @param b RGB-B值的指针** Wiki: https://en.wikipedia.org/wiki/HSL_and_HSV**/
void led_strip_hsv2rgb(uint32_t h, uint32_t s, uint32_t v, uint32_t *r, uint32_t *g, uint32_t *b)
{h %= 360; // h -> [0,360]uint32_t rgb_max = v * 2.55f;uint32_t rgb_min = rgb_max * (100 - s) / 100.0f;uint32_t i = h / 60;uint32_t diff = h % 60;// RGB adjustment amount by hueuint32_t rgb_adj = (rgb_max - rgb_min) * diff / 60;switch (i) {case 0:*r = rgb_max;*g = rgb_min + rgb_adj;*b = rgb_min;break;case 1:*r = rgb_max - rgb_adj;*g = rgb_max;*b = rgb_min;break;case 2:*r = rgb_min;*g = rgb_max;*b = rgb_min + rgb_adj;break;case 3:*r = rgb_min;*g = rgb_max - rgb_adj;*b = rgb_max;break;case 4:*r = rgb_min + rgb_adj;*g = rgb_min;*b = rgb_max;break;default:*r = rgb_max;*g = rgb_min;*b = rgb_max - rgb_adj;break;}
}
4. 七彩流光灯光效果
ESP32完整工程代码:easyio库 中的Demo - 20_RMT_1WIRE_WS2812B
。
easyio的使用介绍:ESP32开源驱动库Easyio的使用
ESP32开发板开源计划
现已开源一款ESP32物联网开发板,支持WIFI、蓝牙、以太网、RS485、CAN通信。板载6轴IMU、温湿度传感器、38K红外遥控收/发、独立RTC、TF卡座。USB和18650双电源供电,有2.0寸单点电容屏可用,配套各外设驱动和LVGL源码。Github、立创EDA、CSDN全云端同步更新。
详情可见:
ESP32-IOT-KIT 开发板介绍:
ESP32开发板开源啦 ESP32-IOT-KIT全开源物联网开发板PCB硬件:
立创EDA:ESP32开发板 IOT-KIT原理图、PCB、BOM
打样免费的时代,速去JLC白嫖PCB。
开源学习交流Q群:827686418
HSV颜色空间转RGB(C语言代码),ESP32使用RMT驱动WS2812B,七彩流光灯光效果相关推荐
- HSV颜色空间和RGB颜色空间相互转换C语言实现
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model).这个模型中颜色的参数 ...
- 【主色提取】HSV 颜色空间与 RGB 颜色空间互相转化的公式和代码
系列文章目录 第二章 主色提取之颜色空间转化 目录 系列文章目录 文章目录 前言 一.HSV 和 RGB 颜色空间 二.颜色转化 1. RGB to HSV 2. HSV to RGB 三. 完整代码 ...
- 【QT数字图像处理】(四)hsv颜色空间转rgb颜色空间
一.颜色模型 1.1 rgb颜色模型 1.2 hsv颜色模型 hsv颜色模型具有以下优点: 1.符合人眼对颜色的感觉: 2.hsv颜色模型中hsv三个坐标是相互独立的:当采用rgb颜色模型时,改变某一 ...
- python rgb转hsv_使用Python / PIL检测HSV颜色空间(来自RGB)的阈...
好的,这确实有效(修复了一些溢出错误): import numpy, Image i = Image.open(fp).convert('RGB') a = numpy.asarray(i, int) ...
- HSV颜色空间及RGB转HSV公式
记录下自己HSV的理解 请了解了RGB形式的色彩表达方式再往下阅读 HSV也是一种颜色的表示方式 此处省去百度百科的介绍 HSV分别代表Hue 色调, Saturation 饱和度, Value 明度 ...
- 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图
一. 使用cvCvtColor函数将RGB颜色空间转换到HSV颜色空间 所需函数: 1.cvCvtColor 函数功能:颜色空间转换 函数原型: void cvCvtColor( const CvAr ...
- RGB颜色空间转换HSV颜色空间 RGB2HSV算法
这是最常用的RGB到HSV例程,还有一个额外的小优化(向除数添加1e-20f以避免需要将除法除以零): 讲解:--------------action---------------- 直接看这段代码很 ...
- 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与HSV颜色空间转换
RGB颜色空间与HSV颜色空间转换 RGB颜色空间与HSV颜色空间转换 1. 前言 2. RGB颜色空间与HSV颜色空间转换描述 3. 代码实现 1. 前言 HSV(Hue, Saturation, ...
- RGB颜色空间、色调、饱和度、亮度、HSV颜色空间详解
一.概述 本文章会详细的介绍RGB颜色空间与RGB三色中色调.饱和度.亮度之间的关系,最后会介绍HSV颜色空间! 一.RGB颜色空间 1. 起源 RGB三原色起源于上世纪初1809年Thomas Yo ...
最新文章
- Python从零开始 day2
- 全球数百万台 Mac 疑似因 Big Sur 更新险酿计算灾难,苹果官方回应来了!
- muduo之EPollPoller
- 单元测试工具JUnit
- 全球隔夜主要金融市场回顾
- std::get(std::tuple)
- 类与接口(二)java的四种内部类详解
- 理解并使用ASP.NET的高级配置
- 反转map的key-value
- 如何将TS格式的视频转换成mp4格式
- 信息收集--wmic命令
- 中介效应分析及R实现
- 大三小学期进阶课程第三十二课:感知算法
- flink 作业提交流程
- Echarts经典颜色搭配
- android六边形图片,android – 如何给图像的六边形形状
- ibmt60升级linux,【原创】老兵不死,T60最强升级记
- 【python_自动化运维教程作业】【day2】餐饮店自助点餐系统
- Android下拉刷新的实现(一) - SwipeRefreshLayout篇
- 离散Laplace-Beltrami 算子
热门文章
- sklearn的快速使用
- 2016年前端web开发趋势总结
- Vue 学习笔记(1) Vue 基础语法 + Axios 基本使用
- java疑难杂症集锦之eclipse(持续更新中)
- Linux不讲武德——开机无法进入登录界面 卡在进度条就不动了
- powershell自动化操作AD域、Exchange邮箱系列(2)—环境要求、搭建及初步演示
- 数据库与Excel表格链接PHP,php读取Excel表格(Excel也可以做数据库)调用phpExcel类库...
- 30岁的你收入是多少?用数据可视化,看看大家的30岁工资真相
- linux创建用户已存在哪里,解决linux下创建用户时出现 Creating mailbox file: 文件已存在...
- apache在线升级yum_基于Redis实现在线游戏积分排行榜 - phyger