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

news2024/11/23 15:37:08

系列文章目录


第二章 主色提取之颜色空间转化


目录

系列文章目录

文章目录

前言

一、HSV 和 RGB 颜色空间

二、颜色转化

1. RGB to HSV

2. HSV to RGB

三、 完整代码


前言

HSV 颜色空间和 RGB 颜色空间的转化。


一、HSV 和 RGB 颜色空间

RGB颜色使用的最多,分别为红色(R),绿色(G)和蓝色(B)。

HSV颜色中的 H( hue) 表示色 调,由颜色名称来辨别,如红、橙、绿,它用角度度量,从-180° 到 180°,或从 0°到 360°; S( saturation) 表示色度或饱和度,指颜色 的深浅,例如同 样 是 红 色,也会因浓度不同分为深红和浅红,S 用百分比来度量,从 0% 到完全饱和的 100% ; V( value) 表示亮 度,指颜色的明暗程度,通常用百分比来度量,从黑 0% 到白100% 。

 

二、颜色转化

1. RGB to HSV

RGB 到 HSV 还是比较简单实现的,

在计算公式前,有三个假设:

  • 设 (r, g, b) 的值是在 0 到 1 之间的实数
  • 设 max 等于 r, g, b 中的最大者
  • 设 min 等于 r, g, b 中的最小者

 公式如下图:

 代码如下:


def RGB2HSV(r,g,b):
    r, g, b = r / 255, g / 255, b / 255
    ma = max(r, g, b)
    mi = min(r, g, b)
    diff = ma - mi
    if ma == mi:
        h = 0
    elif ma == r and g >= b:
        h = 60 * ((g - b)/diff) + 0
    elif ma == r and g < b:
        h = 60 * ((g - b)/diff) + 360
    elif ma == g:
        h = 60 * ((b - r)/diff) + 120
    elif ma == b:
        h = 60 * ((r - g)/diff) + 240

    if ma == 0:
        s = 0
    else:
        s = diff / ma

    v = ma
    return h, s, v

2. HSV to RGB

HSV 转化为 RGB 相对于上面来说是要难一些的,

要注意两点:

1 参数输入范围 h(0~360), s(0~100), v(0~100),所以要把 s, v 缩放到0~1之间 

2 转换结果R(0~100),G(0~100),B(0~100)

公式如下:

 实现代码如下:



def HSV2RGB(h, s, v):
    s, v = s / 100, v /100

    i = round(h / 60) % 6
    f = (h / 60) - i
    p = v * (1 - s)
    q = v * (1 - f * s)
    t = v * (1 - (1 - f) * s)

    R, G, B = 0, 0, 0
    if i == 0:
        R, G, B = v, t, p
    elif i == 1:
        R, G, B = q, v, p
    elif i == 2:
        R, G, B = p, v, t
    elif i == 3:
        R, G, B = p, q, v
    elif i == 4:
        R, G, B = t, p, v
    elif i == 5:
        R, G, B = v, p, q

    r, g, b = round(R * 255), round(G * 255), round(B * 255)
    return r, g, b

三、 完整代码

完整代码可以在GitHub上下载,如果感兴趣,不妨给我个星呀,哈哈。

连接:GitHub - Liangliangb/Image-main-color-extraction: Use the k-means algorithm to extract the dominant color of the picture.Use the k-means algorithm to extract the dominant color of the picture. - GitHub - Liangliangb/Image-main-color-extraction: Use the k-means algorithm to extract the dominant color of the picture.https://github.com/Liangliangb/Image-main-color-extraction.git

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言详解【通讯录的实现】

前言&#xff1a; 在之前的学习中我们已经了解了结构体的一些知识&#xff0c;有了之前的知识的储备&#xff0c;在这里我们就可以尝试通讯录的实现。 目录问题描述基本流程前期的准备工作实现过程第一阶段第二阶段第三阶段1.增加联系人2.删除联系人3.打印通讯录4.查找指定联系…

高等数学(第七版)同济大学 习题11-7 个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题11-7 函数作图软件&#xff1a;Mathematica 1.试对曲面Σ&#xff1a;zx2y2&#xff0c;x2y2≤1&#xff0c;Py2&#xff0c;Qx&#xff0c;Rz2验证斯托克斯公式.\begin{aligned}&1. \ 试对曲面\Sigma&#xff1a;zx^…

yolov5+车道线检测

目标检测与车道线检测在自动驾驶以及车辆定位中起着重要的辅助作用&#xff0c;是环境感知中不可缺少的一个部分。基于深度学习的车道线检测方法近年来也在不断的提升&#xff0c;比如论文&#xff1a;Ultra Fast Deep Lane Detection with HybridAnchor Driven Ordinal Classi…

Allegro如何Wavie DRC操作指导

Allegro如何Wavie DRC操作指导 在做PCB设计的时候,会因为规则设置的原因,导致出现很多DRC,不方便检查,Allegro支持直接Waive掉正常DRC,方便检查,如下图 芯片中心需要打过孔方便散热,但是这些过孔的DRC是不需要显示的 具体操作如下 选择Display选择 Waive DRCs

数据结构与算法3—栈

1. 栈的定义 栈&#xff0c;也叫堆栈&#xff0c;是最常用也是最重要的数据结构之一。栈(Stack)是限定仅在表的一端进行插入或删除操作的线性表&#xff0c;通常称插入、删除的这一端为栈顶(Top)&#xff0c;另一端为栈底(Bottom)。当表中没有元素时称为空栈。栈操作的特点&am…

【服务器数据恢复】StorNext文件系统数据恢复案例

服务器数据恢复环境&#xff1a; 昆腾系列存储&#xff0c;9个磁盘柜&#xff0c;每个磁盘柜配置24块硬盘。其中8个磁盘柜用于存储数据&#xff0c;1个磁盘柜用于存储元数据。上层使用的是StorNext文件系统。 存储元数据的磁盘柜中24块磁盘的分配情况&#xff1a;8组RAID1阵列1…

1361. 验证二叉树

目录题目思路代码题目 二叉树上有 n 个节点&#xff0c;按从 0 到 n - 1 编号&#xff0c;其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。 只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时&#xff0c;返回 true&#xff1b;否则返回 false。 如果节点…

开发小程序遇到的问题

1、小程序授权定位时报错 原因&#xff1a; 需要授权 scope.userLocation、scope.userLocationBackground 时必须配置地理位置用途说明。 解决&#xff1a; 在app.json中&#xff0c;根据开发文档的提示&#xff0c;将下面的代码添加在与pages同级下 "permission": {…

16年经验的通信行业测试人,后悔入错行了吗?

屏幕前的读者对于一个行业的兴衰有什么看法呢&#xff1f;非常很现实的说&#xff0c;我们所处的行业直接关系着每个人的收入&#xff0c;处于行业的不同生命周期内&#xff0c;我们拿到的钱也会不一样。下面用本人所处的行业举个例子。工作经历初入通信行业从我进入通信行业的…

什么是SPI?SPI的优点有哪些?

1、什么是SPI&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是Motorola公司推出的一种同步串行接口技术&#xff0c;是一种高速、全双工、同步的通信总线。 2、SPI优点 支持全双工通信通信简单数据传输速率块 3、缺…

案例分析中可能的考点1:招投标程序

招投标程序&#xff1a; &#xff08;1&#xff09;投标方不满足资质要求&#xff1b; &#xff08;2&#xff09;投标过程不满足时间要求&#xff1b; &#xff08;3&#xff09;招标公告内容或过程不满足要求&#xff1b; &#xff08;4&#xff09;评标人员不满足组成要求&a…

【数据结构与算法】二叉树的非递归前中后序遍历

&#x1f320;作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《数据结构与算法要啸着学》 &#x1f387;座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;…

WebSphere8 批量安装和制作介质服务器

WAS 8.5 介质准备 1、安装install manager 2、安装IBM Packaging Utility unzip pu.offering.disk.linux_1.5.3000.20120531_2025.zip cd disk_linux/InstallerImage_linux ./consoleinst.sh 跟着向导安装。 3、安装PU mkdir pu cd pu unzip ../pu_1.5.3.zip ./imcl i…

如何使用集成在 SharePoint 中的开源 ONLYOFFICE 文档替代微软 Office

ONLYOFFICE 文档是一款开源的办公套件&#xff0c;在 GNU AGPL v3.0 下分发。它包括基于网络的查看器和协作编辑器&#xff0c;可用于处理文本文档、电子表格和演示文稿&#xff0c;与 OOXML 格式高度兼容。 ONLYOFFICE 文档可以与多种云服务集成&#xff0c;如 Nextcloud、ow…

仅CPU服务器pytorch ,torch_geometric安装配置

写在开头&#xff0c;做了整整三年的多组学数据分析&#xff0c;各种模式动物、组织、细胞系的各种组学数据&#xff0c;该怎么串联成我的论文&#xff1f;就是我要开启深度学习小白模式了。 万种流程先从环境配置开始&#xff0c;先说说环境&#xff0c;其实当家的有多GPU超大…

儿童护眼灯哪个好?四款儿童护眼台灯测评

儿童护眼灯在孩子的学习过程中起到了很重要的作用&#xff0c;53.7%的青少年们都有近视的现象&#xff0c;而好的台灯不仅照明非常柔和&#xff0c;而且对眼睛没有刺激和伤害&#xff0c;护眼灯相比传统电灯&#xff0c;一是古县更加明亮且可以调节&#xff0c;二是有护眼技术的…

HANA 的 calculation view出现模糊关联 ambiguous join

一旦我们用了join&#xff0c;那就会有个Analytic Engine分析引擎来确保不是唯一连接的时候&#xff0c;关键值不会被重复。 啥是模糊关联&#xff1f; 一般来讲关联基数是1&#xff1a;n, 或者n:1,或者 m:n都是。 以上两个关联&#xff0c;结果集如下&#xff1a; 这时候&a…

php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07

php学习笔记-php会话控制及web常用的预定义变量-day071、$_REQUEST2、$_SERVER3、$_COOKIE3.1 cookie的内容3.2 cookie的分类3.3 php中cookie的使用3.4 cookie自动登录小demo4、$SESSION4.1 session的工作原理4.2 session的使用4.2.1 修改php.ini中的session配置4.2.2 开启sess…

Android 深入系统完全讲解(13)

3 编译过程讲解 1 系统的编译过程 Android 的编译使用的 Makefile&#xff0c;推荐大家使用《GNU make 中文手册》&#xff0c;这本书有电子版&#xff0c;非常方便&#xff0c;主要是要理解清楚 Makefile 的规则&#xff0c;编译策略&#xff0c;可以通过写简单的编译机制&am…

【Java项目推荐】值得写到简历上的项目--黑马点评

优惠卷秒杀前言优惠券秒杀实现优惠券秒杀下单超卖问题一人一单分布式锁redis中加锁的一些特殊情况手动实现分布式锁分布式锁误删情况1分布式锁误删情况2lua脚本解决多条命令的原子性问题Redisson秒杀优化异步秒杀思路基于redis完成秒杀资格判断基于阻塞队列实现异步下单总结Red…