colorsys模块

博主最近又进入了无聊模式,没事就翻Python标准库读源码读着玩。但是里面有几个模块确实规模比较大,所以坑挖了一半就停了…现在电脑桌面上一堆没填完的坑。总之慢慢填吧…

今天发现了这么一个模块,非常简单,也有些实用性(对于经常用Python处理图片的同学来说),所以在此介绍一下。


colorsys模块提供了用于RGB和YIQ/HLS/HSV颜色模式的双向转换的接口。它提供了六个函数,其中三个用于将RGB转YIQ/HLS/HSV,另外三个用于将YIQ/HLS/HSV转为RGB。

colorsys.rgb_to_yiq(r, g, b)
colorsys.rgb_to_hls(r, g, b)
colorsys.rgb_to_hsv(r, g, b)

colorsys.yiq_to_rgb(y, i, q)
colorsys.hls_to_rgb(h, l, s)
colorsys.hsv_to_rgb(h, s, v)

需要注意的是:除了I和Q之外的其他参数取值都是在[0, 1]范围内的浮点数。所以传入RGB参数的时候还需要额外做一个除以255的操作。

>>> import colorsys
>>> colorsys.rgb_to_hsv(30/255, 50/255, 160/255)
(0.6410256410256411, 0.8125, 0.6274509803921569)

具体的转换算法在这就不介绍了,源码里都有,也就100多行,有兴趣阅读源码的同学可以在Python根目录/Lib目录下找到colorsys.py这个源文件。在这主要介绍一下模块中涉及到的四种颜色模型。

RGB

RGB是一种相加色,也就是根据红绿蓝三种光的相互叠加来显示不同的颜色,RGB三个字母分别代表红色Red、绿色Green和蓝色Blue。那些分辨率比较小的的显示器用手机拍出照片后放大看,就可以看到由红绿蓝三种颜色的发光管共同组成的一个像素,像素的颜色就是由这三个发光管的亮度决定的。

HSV和HSV

HLS也就是人们常说的HSL,分别代表色相Hue,亮度Lightness和饱和度Saturation。HSV也就是HSB,用过Photoshop的同学应该对HSB不陌生,它的三个字母分别代表色相Hue,饱和度Saturation和明度Value(Brightness)。

RGB在数学上可以用一个平面直角坐标系来表示,三个坐标轴分别代表红绿蓝三色的色值。但是用RGB来表示颜色时,颜色的变化对于人类来说并不是很直观,于是就产生了HSL和HSV。HSL和HSV通过对颜色信息的进一步封装,使其通过一种人类更加容易感知的形式来表示颜色变化。(色调的变化、亮度的变化、色彩纯度的变化)

HSL和HSV通过对RGB颜色模型进行变换,将原本的平面直角坐标系转换为一个圆柱坐标系。HSL颜色模型的顶端是白色,底端是黑色,可以用一个双六角锥体来表现。而HSV颜色模型可以用一个倒六角锥体来表示,锥体的顶点是黑色。下图来自英文维基百科,展现了RGB是怎么转换为HSL和HSV的:

注意:这两个颜色模型中对于色相的定义是相同的,但各自对于饱和度的定义是不同的。

下面两张同样来自维基百科的图片展示了这两个模型的差异:

YIQ

YIQ颜色模型使用亮度Luminance和色度Chrominance来表示颜色。用一组坐标来表示颜色的变化,Q表示了颜色色调由紫到绿的变化,I表示了颜色色调由橙到蓝的变化。

关于YIQ的特点,百度百科-颜色空间作了以下总结:

YIQ颜色空间具有能将图像中的亮度分量分离提取出来的优点,并且YIQ颜色空间与RGB颜色空间之间是线性变换的关系,计算量小,聚类特性也比较好,可以适应光照强度不断变化的场合,因此能够有效地用于彩色图像处理。

下图来自英文维基百科:


总结

其实模块和源码倒没有什么难的,难的是几个颜色模型的概念,在bing和百度上找到的中文资料都非常有限。如果有读者对这方面感兴趣的,推荐你们读一下下面链接里的参考资料,有条件的最好买图像处理方面的专业书籍来看。


参考资料:

https://docs.python.org/3.6/library/colorsys.html
https://en.wikipedia.org/wiki/HSL_and_HSV
https://en.wikipedia.org/wiki/YIQ

[Python模块学习]用colorsys模块转换颜色模型,常见颜色模型简介(RGB/HSV/HSL/YIQ)相关推荐

  1. Python模块学习 - 用tinify模块压缩和优化图片

    Python模块学习 - 用tinify模块压缩和优化图片 tinify模块 功能描述:TinyPNG和TinyJPG网站提供了压缩和优化.png和.jpg格式图片的功能.虽然可以很轻松地使用网页版进 ...

  2. 从入门到入土:Python爬虫学习|Selenium自动化模块学习|简单入门|轻松上手|自动操作浏览器进行处理|chrome|PART01

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  3. Python基础学习之 os 模块详解

    Python基础学习之 os 模块详解 文章目录 Python基础学习之 os 模块详解 1. 路径操作 1.1 os.chdir(),切换当前工作目录: 1.2 os.getcwd(),返回工作目录 ...

  4. 疯狂Python讲义学习笔记(含习题)之 常见模块

    一.sys模块 sys模块代表了Python解释器,主要用于获取和Python解释器相关的信息. >>> import sys >>> [e for e in di ...

  5. 简明Python教程学习笔记_3_模块

    模块 如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块.模块基本上就是一个包含了所有你定义的函数和变量的文件.为了在其他程序中重用模块,模块的文件名必须以. ...

  6. Python模块学习之IPy模块

    1.IPy介绍 IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能.可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段.网络掩码.广播地 ...

  7. 【Python模块学习】pandas模块简介

    pandas模块学习 一.背景概述 Pandas (Python Data Analysis Library) 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. numpy更加适用 ...

  8. Python快速学习08:模块的操作

    前言 系列文章:[传送门] 天气干燥,我就上火,流鼻血.希望身子好起来. 正文 函数和对象都是为了更好的组织已经有的程序,以方便重复利用. 模块(module)也是为了同样的目的.模块可以包含可执行代 ...

  9. python模块学习之glob模块

    glob模块 功能描述:glob模块可以使用Unix shell风格的通配符匹配符合特定格式的文件和文件夹,跟windows的文件搜索功能差不多.glob模块并非调用一个子shell实现搜索功能,而是 ...

最新文章

  1. 为什么国内流行的 MyBatis ,国外 Java 工程师却不愿意使用?
  2. 【高并发】面试官问我:为啥局部变量是线程安全的?
  3. shell实例第17讲:连续输入4个100以内的数字,统计和、乘、平均、最小和最大
  4. Wince 中如何实现注册表恢复原厂设置
  5. 敏捷转型历程 - Sprint3 回顾会
  6. 最终在学校的职业发展目标
  7. C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区...
  8. CentOS7.9安装及配置
  9. 线程安全的三大不安全案例以及解决方法
  10. 如何在MySQL中缩小/清除ibdata1文件
  11. 新一期,微信免费领7天WPS稻壳会员活动!
  12. PostgreSQL 数据库跨版本升级常用方案
  13. 统计大写字符、小写字符、数字等个数
  14. 欧氏距离(Euclidean distance)
  15. 树莓派上编译安装hostapd
  16. DELL OMSA(SrvAdmin)-监控软件与Promethues结合
  17. 利用css将复选框设为透明并改变勾选样式
  18. 关于SSM的家具购物系统的设计答辩问题合集
  19. js把数据导出成excel的中文乱码问题解决
  20. matlab三相短路电流计算程序_三相短路短路电流计算(matlab程序)

热门文章

  1. 奋斗吧,程序员——第十八章 山盟虽在,锦书难托
  2. 共享经济下的身份证识别和驾驶证识别
  3. matlab正交gold码的相关性,基于Matlab的CDMA通信系统仿真
  4. 游戏运维编年史|可能是目前最详细的游戏运维指南(转载附链接)
  5. 开源项目分享-健身房管理系统
  6. OpenMMLab 目标检测
  7. 网络综合布线在计算机专业的作用,网络综合布线毕业论文
  8. ocsp服务器的证书状态如何查询,站点ocsp stapling检查、检查https 站点ocsp stapling配置、检查站点证书吊销状态信息...
  9. python爬虫框架教程_Python爬虫实战(十二):爬虫框架Scrapy的第一个爬虫示例入门教程...
  10. 服务器安全狗搭建过程