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,简洁易用。
不足的地方是输入输出都是整形,如需浮点,请自行将里面的参数都改为floatdouble

/*** @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,七彩流光灯光效果相关推荐

  1. HSV颜色空间和RGB颜色空间相互转换C语言实现

    HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model).这个模型中颜色的参数 ...

  2. 【主色提取】HSV 颜色空间与 RGB 颜色空间互相转化的公式和代码

    系列文章目录 第二章 主色提取之颜色空间转化 目录 系列文章目录 文章目录 前言 一.HSV 和 RGB 颜色空间 二.颜色转化 1. RGB to HSV 2. HSV to RGB 三. 完整代码 ...

  3. 【QT数字图像处理】(四)hsv颜色空间转rgb颜色空间

    一.颜色模型 1.1 rgb颜色模型 1.2 hsv颜色模型 hsv颜色模型具有以下优点: 1.符合人眼对颜色的感觉: 2.hsv颜色模型中hsv三个坐标是相互独立的:当采用rgb颜色模型时,改变某一 ...

  4. python rgb转hsv_使用Python / PIL检测HSV颜色空间(来自RGB)的阈...

    好的,这确实有效(修复了一些溢出错误): import numpy, Image i = Image.open(fp).convert('RGB') a = numpy.asarray(i, int) ...

  5. HSV颜色空间及RGB转HSV公式

    记录下自己HSV的理解 请了解了RGB形式的色彩表达方式再往下阅读 HSV也是一种颜色的表示方式 此处省去百度百科的介绍 HSV分别代表Hue 色调, Saturation 饱和度, Value 明度 ...

  6. 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图

    一. 使用cvCvtColor函数将RGB颜色空间转换到HSV颜色空间 所需函数: 1.cvCvtColor 函数功能:颜色空间转换 函数原型: void cvCvtColor( const CvAr ...

  7. RGB颜色空间转换HSV颜色空间 RGB2HSV算法

    这是最常用的RGB到HSV例程,还有一个额外的小优化(向除数添加1e-20f以避免需要将除法除以零): 讲解:--------------action---------------- 直接看这段代码很 ...

  8. 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与HSV颜色空间转换

    RGB颜色空间与HSV颜色空间转换 RGB颜色空间与HSV颜色空间转换 1. 前言 2. RGB颜色空间与HSV颜色空间转换描述 3. 代码实现 1. 前言 HSV(Hue, Saturation, ...

  9. RGB颜色空间、色调、饱和度、亮度、HSV颜色空间详解

    一.概述 本文章会详细的介绍RGB颜色空间与RGB三色中色调.饱和度.亮度之间的关系,最后会介绍HSV颜色空间! 一.RGB颜色空间 1. 起源 RGB三原色起源于上世纪初1809年Thomas Yo ...

最新文章

  1. Python从零开始 day2
  2. 全球数百万台 Mac 疑似因 Big Sur 更新险酿计算灾难,苹果官方回应来了!
  3. muduo之EPollPoller
  4. 单元测试工具JUnit
  5. 全球隔夜主要金融市场回顾
  6. std::get(std::tuple)
  7. 类与接口(二)java的四种内部类详解
  8. 理解并使用ASP.NET的高级配置
  9. 反转map的key-value
  10. 如何将TS格式的视频转换成mp4格式
  11. 信息收集--wmic命令
  12. 中介效应分析及R实现
  13. 大三小学期进阶课程第三十二课:感知算法
  14. flink 作业提交流程
  15. Echarts经典颜色搭配
  16. android六边形图片,android – 如何给图像的六边形形状
  17. ibmt60升级linux,【原创】老兵不死,T60最强升级记
  18. 【python_自动化运维教程作业】【day2】餐饮店自助点餐系统
  19. Android下拉刷新的实现(一) - SwipeRefreshLayout篇
  20. 离散Laplace-Beltrami 算子

热门文章

  1. sklearn的快速使用
  2. 2016年前端web开发趋势总结
  3. Vue 学习笔记(1) Vue 基础语法 + Axios 基本使用
  4. java疑难杂症集锦之eclipse(持续更新中)
  5. Linux不讲武德——开机无法进入登录界面 卡在进度条就不动了
  6. powershell自动化操作AD域、Exchange邮箱系列(2)—环境要求、搭建及初步演示
  7. 数据库与Excel表格链接PHP,php读取Excel表格(Excel也可以做数据库)调用phpExcel类库...
  8. 30岁的你收入是多少?用数据可视化,看看大家的30岁工资真相
  9. linux创建用户已存在哪里,解决linux下创建用户时出现 Creating mailbox file: 文件已存在...
  10. apache在线升级yum_基于Redis实现在线游戏积分排行榜 - phyger