图像处理时,有些图像可能在 RGB 颜色空间信息不如转换到其它颜色空间更清晰.

这里整理下关于颜色空间的知识,以及 python-opencv 的实现.

图像处理中有多种色彩空间,例如 RGB、HLS、HSV、HSB、YCrCb、CIE XYZ、CIE Lab 等,经常要遇到色彩空间的转化,以便生成 mask 图等操作.

颜色空间也称彩色模型(彩色空间,彩色系统),主要是在某些标准下用通常可接受的方式对彩色加以说明.

本质上,彩色模型是坐标系统和子空间的阐述. 位于系统的每种颜色都有单个点表示.

在彩色图像处理中,选择合适的彩色模型是很重要的. 从应用的角度来看,众多彩色模型可以分为两类:

[1] - 面向诸如彩色显示器或彩色打印机之类输出显示场合使用的硬设备.

[2] - 面向视觉感知或者说以彩色处理分析为目的的应用,如动画中的彩色图形,各种图像处理的算法等.(这里主要是图像处理.)

1. 几种颜色空间

1.1. RGB

RGB (Red 红色,Green 绿色,Blue 蓝色),是根据人眼识别的颜色而定义的空间,可用于表示大部分颜色,也是图像处理中最基本、最常用、面向硬件的颜色空间,是一种光混合的体系.

RGB 颜色模式用三维空间中的一个点表示一种颜色,每个点有三个分量,分别表示红、绿、蓝的亮度值,亮度值限定为 [0, 1].

在RGB模型的立方体中,

[1] - 原点对应的颜色为黑色,它的三个分量值都为0;

[2] - 距离原点最远的顶点对应的颜色为白色,三个分量值都为1.

[3] - 从黑色到白色的灰度值分布在这两个点的连线上,该虚线称为灰度线.

[4] - 立方体的其余各点对应不同的颜色,即三原色红、绿、蓝及其混合色黄、品红、青色.

1.2. LAB 颜色空间

LAB 全称是 CIELAB,CIE代表 International Commission on Illumination(国际照明委员会),它是一个关于光照、颜色等的国际权威组织.

LAB 颜色空间由一个亮度通道和两个颜色通道组成的. 在LAB 颜色空间中,每个颜色用L、A、B三个数字表示,其中,各个分量的含义是:

[1] - L - 亮度

[2] - A - 从绿色到红色的分量

[3] - B - 从蓝色到黄色的分量

LAB 是基于人对颜色的感觉来设计的,更具体地说,它是感知均匀(perceptual uniform)的。Perceptual Uniform的意思是,如果数字(即前面提到的L、A、B这三个数)变化的幅度一样,那么它给人带来视觉上的变化幅度也差不多.(注:Helmholtz–Kohlrausch effect 是人眼的一种错觉——当色彩饱和度高时,颜色会看起来更亮.)

LAB 相较于RGB与CMYK等颜色空间更符合人类视觉,也更容易调整:想要调节亮度,就调节L 通道,想要调节只色彩平衡就分别调 A 和 B.

理论上说,L、A、B 都是实数,一般限定在一个整数范围内:L 越大,亮度越高。L 为 0 时代表黑色,为100时代表白色。

A 和 B 为0时都代表灰色。

A 从负数变到正数,对应颜色从绿色变到红色。

B 从负数变到正数,对应颜色从蓝色变到黄色。

在实际应用中常常将颜色通道的范围[-100, +100]或[-128, 127]之间。

1.3. HSI

HSI 颜色空间可以用一个圆锥空间模型来描述,能清晰表现色调(Hue)、饱和度(Saturation, Chroma)和亮度(Intensity, Brightness)的变化情形.

色相 H(Hue) - 表示颜色的相位角. 红、绿、蓝分别相隔 120 度;互补色分别相差 180 度,即颜色的类别.

饱和度 S(Saturation) - 色彩的强度或纯度. 表示成所选颜色的纯度和该颜色最大的纯度之间的比率,范围:[0, 1],即颜色的深浅程度.

亮度 I(Intensity) - 表示颜色的明亮程度,通常以 0% (黑色) 到 100% (白色) 的百分比来衡量(人眼对亮度很敏感).

HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,它们之间可以进行相互转换:HSI颜色模式中的色调使用颜色类别表示,饱和度与颜色的白光光亮亮度刚好成反比,代表灰色与色调的比例,亮度是颜色的相对明暗程度.

2. cv2.cvtColor() 颜色转换函数import matplotlib.pyplot as plt

import cv2

img_BGR = cv2.imread('test.jpg') # BGR

plt.subplot(3,3,1)

plt.imshow(img_BGR);plt.axis('off');plt.title('BGR')

img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)

plt.subplot(3,3,2)

plt.imshow(img_RGB);plt.axis('off');plt.title('RGB')

img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)

plt.subplot(3,3,3);

plt.imshow(img_GRAY);plt.axis('off');plt.title('GRAY')

img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)

plt.subplot(3,3,4)

plt.imshow(img_HSV);plt.axis('off');plt.title('HSV')

img_YcrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb)

plt.subplot(3,3,5)

plt.imshow(img_YcrCb);plt.axis('off');plt.title('YcrCb')

img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)

plt.subplot(3,3,6)

plt.imshow(img_HLS);plt.axis('off');plt.title('HLS')

img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)

plt.subplot(3,3,7)

plt.imshow(img_XYZ);plt.axis('off');plt.title('XYZ')

img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)

plt.subplot(3,3,8)

plt.imshow(img_LAB);plt.axis('off');plt.title('LAB')

img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)

plt.subplot(3,3,9)

plt.imshow(img_YUV);plt.axis('off');plt.title('YUV')

plt.show()

3. 参考

python颜色函数_颜色空间及cv2.cvtColor 转换函数相关推荐

  1. OpenCV最经典的3种颜色空间(cv2.cvtColor)及互相转换

    OpenCV最经典的3种颜色空间(cv2.cvtColor)及互相转换 1. 效果图 2. 原理 2.1 照明条件的重要性 2.2 OpenCV 中的3种颜色空间/模型 2.3 颜色空间的主要用途 3 ...

  2. 数据库创建函数_达梦数据库创建UUID函数

    数据库创建函数_达梦数据库创建UUID函数 接触达梦数据库有一段时间了,整理了一些资料,今天分享一下达梦数据UUID自定义函数 UUID函数定义 很多数据库都有提供UUID函数,可是接触达梦数据库后, ...

  3. c语言 格式转换函数,C语言中的格式转换函数.doc

    C语言中的格式转换函数 C语言中的格式转换函数 表头文件 #include 定义函数 double atof(const char *nptr); 函数说明 atof()会扫描参数nptr字符串,跳过 ...

  4. python 颜色识别_在python中构建颜色识别器

    python 颜色识别 In this post, I will show you how to build your own color recognizer using Python. This ...

  5. python颜色识别_浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法

    [更新]主要提供两种方案: 方案一:(参考网上代码,感觉实用性不是很强)使用PIL截取图像,然后将RGB转为HSV进行判断,统计判断颜色,最后输出RGB值 方案二:使用opencv库函数进行处理.(效 ...

  6. python温度转换代码_用python编写一个名为“convert_temp”的温度转换函数

    编写一个名为"convert_temp"的温度转换函数.它应该能够处理华氏到摄氏的转换以及摄氏到华氏的转换. 它必须接受并读取传递给它的两个参数:第一,原始温度的温标(只应使用&q ...

  7. imread函数_不知道这 7 大 OpenCV 函数怎么向计算机视觉专家进阶?

    作者 | Lazar Gugleta译者 | Arvin,责编 | 夕颜头图 | CSDN付费下载自视觉中国出品 | CSDN(ID:CSDNnews)计算机视觉和计算机图形学现在非常流行,因为它们与 ...

  8. 未捕获typeerror: $形象。cropper不是函数_没有学不会的python--细说函数

    没有学不会的python 函数是什么? 老调常谈,还是那老一套,学习一个东西前,先搞懂是什么,再来学习怎么用. 函数函数,如果你是刚经历过高考肯定很熟悉,数学中就经常出现这个名词,比如什么sin函数, ...

  9. 中的count函数_关于计数的5个函数都不掌握,那就真的Out了!

    提起计数,大家肯定会想到Count函数,但如果要附加条件完成计数任务,那还用Count函数吗?答案是No,Why?请看下文. 一.Count函数:统计数字单元格的个数. 方法: 在目标单元格中输入公式 ...

最新文章

  1. DBGrid 应用全书(一)
  2. 环形缓冲区实现类(Delphi)
  3. SQLServer全文检索无内容
  4. MySQL修改、删除表的结构
  5. DSP编程的一些优化技巧和注意事项
  6. 腾讯已问灵魂,鹅厂新立家风
  7. Python基础篇:某宝一键秒杀,毫秒级的精准度
  8. [Flink]Flink的window介绍
  9. 文件被后台程序占用无法删除_群晖NAS教程第十五节:查询群晖NAS硬盘空间占用情况,解决删除文件空间不增加问题...
  10. Altium Designer(七):3D模型
  11. 线上只执行一次的脚本编写注意事项
  12. json字符串-单、双引号
  13. Linux-脚本、tailf
  14. 支撑向量机作业(SVM)
  15. 常见系统安全漏洞及解决方案
  16. 小程序管理新闻资讯分类-微信小程序视频教程27
  17. 弘辽科技:淘宝类目属性的型号是什么?
  18. IPFS windos 搭建
  19. 【Java实例】王者荣耀阵容展示
  20. openfeign集成Hystrix的备选方案处理

热门文章

  1. java有声小说如何开发_怎么才能做有声小说播音,有声书主播如何训练
  2. Apache Geronimo读音及含义
  3. 如何在Java ME平台上获取手机串号IMMI
  4. Javascript 遍历对象的四种方法
  5. 学习ES6 你必须知道的新特性!!关于数组的扩展
  6. 【技术开发】谷歌验证码 ReCaptcha 破解教程,简单方便从零开始。
  7. python递归打印目录树
  8. 【Android Studio 3.5.3】问题点:运行失败,提示 If that is not the case, delete the files at
  9. DragonBones 骨骼动画引擎
  10. 让天下没有难用的搜索:阿里搜索如何成长为贴心“暖男”?