opencv-18 什么是色彩空间?

1.什么是色彩空间类型?

色彩空间类型,也称为颜色空间类型或色彩模型,是一种表示图像中颜色的方式。在计算机图形学和数字图像处理中,有许多种色彩空间类型,每种类型有不同的表达方式和特点。

常见的色彩空间类型包括:

RGB (Red, Green, Blue):
RGB 是最常见和广泛使用的色彩空间类型。它使用红色(R)、绿色(G)和蓝色(B)三个通道来表示颜色。每个通道的取值范围通常是 0 到 255,其中 0 表示最小强度(无颜色),255 表示最大强度(全颜色)。

HSV (Hue, Saturation, Value):
HSV 色彩空间是基于人类视觉感知的方式来表示颜色。它使用色调(Hue)、饱和度(Saturation)和明度(Value)三个分量来表示颜色。色调表示颜色的类型(如红色、绿色、蓝色等),饱和度表示颜色的纯度或鲜艳程度,明度表示颜色的明亮程度。

CMYK (Cyan, Magenta, Yellow, Key/Black):
CMYK 色彩空间主要用于印刷领域。它使用青色(Cyan)、品红(Magenta)、黄色(Yellow)和黑色(Key/Black)四个分量来表示颜色。CMYK 色彩空间适用于描述印刷颜色和色彩叠加的过程。

Lab (CIELAB):
Lab 色彩空间是一种基于人类视觉感知的颜色空间。它使用亮度(L)和两个色度通道(a、b)来表示颜色。L 表示亮度(从黑到白),a 和 b 分别表示颜色在红绿和黄蓝方向上的偏移。

YUV/YCbCr:
YUV 和 YCbCr 色彩空间主要用于数字视频和图像压缩。它们使用亮度分量(Y)和两个色度分量(U、V或Cb、Cr)来表示颜色。Y 表示亮度信息,U 和 V(或Cb 和 Cr)表示颜色的色度信息。

每种色彩空间类型都有其特定的应用场景和优缺点。在图像处理和计算机视觉中,根据不同的需求和算法,选择合适的色彩空间类型可以提高处理效率和结果质量。例如,RGB色彩空间适用于计算机显示和处理,HSV 色彩空间适用于颜色选择和图像分割,Lab 色彩空间适用于色彩感知相关的任务等。

opencv 中比较常用的色彩空间包括 GRAY 色彩空间、XYZ 色彩空间、YCrCb 色彩空间、HSV 色彩空间、HLS 色彩空间、CIELab色彩空间、CIELuv色彩空间、Bayer 色彩空间等,下面将依次介绍

GRAY色彩空间

GRAY(灰度图像)通常指 8 位灰度图,其具有 256 个灰度级,像素值的范围是[0,255]。
当图像由 RGB 色彩空间转换为 GRAY 色彩空间时,其处理方式如下:

Gray = 0.299 · 𝑅 + 0.587 · 𝐺 + 0.114 · 𝐵

上述是标准的转换方式,也是 OpenCV 中使用的转换方式。有时,也可以采用简化形式完
成转换:

Gray = 𝑅 + 𝐺 + 𝐵

当图像由 GRAY 色彩空间转换为 RGB 色彩空间时,最终所有通道的值都将是相同的,其
处理方式如下:

𝑅 = Gray
𝐺 = Gray
𝐵 = Gray

XYZ色彩空间

XYZ 色彩空间是由 CIE(International Commission on Illumination)定义的,是一种更便于计算的色彩空间,它可以与 RGB 色彩空间相互转换。
将 RGB 色彩空间转换为 XYZ 色彩空间,其转换形式为:

在这里插入图片描述
将 XYZ 色彩空间转换为 RGB 色彩空间,其转换形式为:

在这里插入图片描述
YCrCb色彩空间

人眼视觉系统(HVS,Human Visual System)对颜色的敏感度要低于对亮度的敏感度。在
传统的 RGB 色彩空间内,RGB 三原色具有相同的重要性,但是忽略了亮度信息。
在 YCrCb 色彩空间中,Y 代表光源的亮度,色度信息保存在 Cr 和 Cb 中,其中,Cr 表示红色分量信息,Cb 表示蓝色分量信息。
亮度给出了颜色亮或暗的程度信息,该信息可以通过照明中强度成分的加权和来计算。
在RGB 光源中,绿色分量的影响最大,蓝色分量的影响最小。
从 RGB 色彩空间到 YCrCb 色彩空间的转换公式为:

𝑌 = 0.299 · 𝑅 + 0.587 · 𝐺 + 0.114 · B

Cr = (𝑅 − 𝑌) × 0.713 + delta
Cb = (𝐵 − 𝑌) × 0.564 + delta
式中 delta 的值为:
delta = �
从 YCrCb 色彩空间到 RGB 色彩空间的转换公式为:

𝑅 = 𝑌 + 1.403 · (Cr − delta)
𝐺 = 𝑌 − 0.714 · (Cr − delta)0.344 · (Cb − delta)
𝐵 = 𝑌 + 1.773 · (Cb − delta)

式中,delta 的值与上面公式中的 delta 值相同。

HSV色彩空间

RGB 是从硬件的角度提出的颜色模型,在与人眼匹配的过程中可能存在一定的差异,HSV色彩空间是一种面向视觉感知的颜色模型。HSV 色彩空间从心理学和视觉的角度出发,指出人眼的色彩知觉主要包含三要素:色调(Hue,也称为色相)、饱和度(Saturation)、亮度(Value),
色调指光的颜色,饱和度是指色彩的深浅程度,亮度指人眼感受到的光的明暗程度。
** 色调:**色调与混合光谱中的主要光波长相关,例如“赤橙黄绿青蓝紫”分别表示不同的色调。如果从波长的角度考虑,不同波长的光表现为不同的颜色,实际上它们体现的是
色调的差异。
** 饱和度:**指相对纯净度,或一种颜色混合白光的数量。纯谱色是全饱和的,像深红色(红
加白)和淡紫色(紫加白)这样的彩色是欠饱和的,饱和度与所加白光的数量成反比。
** 亮度:**反映的是人眼感受到的光的明暗程度,该指标与物体的反射度有关。对于色彩来
讲,如果在其中掺入的白色越多,则其亮度越高;如果在其中掺入的黑色越多,则其亮
度越低。
在具体实现上,我们将物理空间的颜色分布在圆周上,不同的角度代表不同的颜色。因此,
通过调整色调值就能选取不同的颜色,色调的取值区间为[0, 360]。色调取不同值时,所代表的颜色如表 4-1 所示,两个角度之间的角度对应两个颜色之间的过渡色。

在这里插入图片描述
饱和度为一比例值,范围是[0, 1],具体为所选颜色的纯度值和该颜色最大纯度值之间的比
值。饱和度的值为 0 时,只有灰度。亮度表示色彩的明亮程度,取值范围也是[0, 1]。
在 HSV 色彩模型中,取色变得更加直观。例如,取值“色调=0,饱和度=1,亮度=1”,则
当前色彩为深红色,而且颜色较亮;取值“色调=120,饱和度=0.3,亮度=0.4”,则当前色彩为
浅绿色,而且颜色较暗。
在从 RGB 色彩空间转换到 HSV 色彩空间之前,需要先将 RGB 色彩空间的值转换到[0, 1]
之间,然后再进行处理。具体处理方法为:

在这里插入图片描述
在这里插入图片描述
计算结果可能存在 H<0 的情况,如果出现这种情况,则需要对 H 进行进一步计算,如下。

在这里插入图片描述
由上述公式计算可知:

𝑆 ∈ [0,1]
𝑉 ∈ [0,1]
𝐻 ∈ [0,360]

当然,也可以通过公式完成从 HSV 色彩空间到 RGB 色彩空间的转换。在 OpenCV 的官方
文档中有完整的转换公式,这里不再赘述。
当然,所有这些转换都被封装在 OpenCV 的 cv2.cvtColor()函数内。通常情况下,我们都是直接调用该函数来完成色彩空间转换的,而不用考虑函数的内部实现细节。

HLS色彩空间

HLS 色彩空间包含的三要素是色调 H(Hue)、光亮度/明度 L(Lightness)、饱和度 S
(Saturation)。
与 HSV 色彩空间类似,只是 HLS 色彩空间用“光亮度/明度 L(lightness)”替换了“亮度
(Value)”。
** 色调:**表示人眼所能感知的颜色,在 HLS 模型中,所有的颜色分布在一个平面的色调
环上,整个色调环为 360 度的圆心角,不同的角度代表不同的颜色,如表 4-1 所示。
** 光亮度/明度:**用来控制色彩的明暗变化,它的取值范围也是[0, 1]。我们通过光亮度/明
度的大小来衡量有多少光线从物体表面反射出来。光亮度/明度对于眼睛感知颜色很重
要,因为当一个具有色彩的物体处于光线太强或者光线太暗的地方时,眼睛是无法准确
感知物体颜色的。
** 饱和度:**使用[0, 1]的值描述相同色调、相同光亮度/明度下的色彩纯度变化。饱和度的
值越大,表示颜色的纯度越高,颜色越鲜艳;反之,饱和度的值越小,色彩的纯度越低,
颜色越暗沉。通常用该属性表示颜色的深浅,比如深绿色、浅绿色。

CIELab*色彩空间

CIELab*色彩空间是均匀色彩空间模型,它是面向视觉感知的颜色模型。从视觉感知均匀的角度来讲,人所感知到的两种颜色的区别程度,应该与这两种颜色在色彩空间中的距离成正比。在某个色彩空间中,如果人所观察到的两种颜色的区别程度,与这两种颜色在该色彩空
间中对应的点之间的欧式距离成正比,则称该色彩空间为均匀色彩空间。

CIELab色彩空间中的 L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白
a分量表示从红色到绿色的范围,取值范围是[-127,127];
b
分量表示从黄色到蓝色的范围,取值范围是[-127,127]。
在从 RGB 色彩空间转换到 CIELab*色彩空间之前,需要先将 RGB 色彩空间的值转换到[0, 1]之间,然后再进行处理。

由于 CIELab色彩空间是在 CIE 的 XYZ 色彩空间的基础上发展起来的,在具体处理时, 需要先将 RGB 转换为 XYZ
色彩空间,再将其转换到 CIEL
ab色彩空间

具体实现方法为:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虹科新闻 | 虹科与Berghof正式建立合作伙伴关系

近日&#xff0c;虹科与德国Berghof公司达成战略合作&#xff0c;虹科正式成为Berghof Automation在大中华区的认证授权代理商。未来&#xff0c;虹科将携手Berghof一同为机器制造商、系统集成商和工业设备制造商提供先进的解决方案&#xff0c;从而在最小的空间内实现最高的性…

STM32使用HAL库BH1750光照度传感器

开发环境 单片机&#xff1a;STM32F103C8T6 光照度传感器&#xff1a;BH1750 IDE&#xff1a;KEILSTM32CUBEMX 单片机配置 1、STM32CUBEMX BH1750代码 1、头文件 /* ************************************************* BH1750光照数据计算&#xff08;LUX&#xff09; …

React Flow

// 创建项目 npm create vitelatest my-react-flow-app -- --template react // 安装插件 npm install reactflow // 运行项目 npm run dev 1、App.jsx import { useCallback, useState } from react; import ReactFlow, {addEdge,ReactFlowProvider,MiniMap,Controls,useNode…

50条必背JAVA知识点(二)

16.强制类型转换&#xff1a;将容量大的数据类型转换为容量小的数据类型&#xff0c;但可能造成精度降低或溢出。 17.字符串不能直接转换为基本类型&#xff0c;但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。 18.计算机底层都以二进制补码的方式来存储数据。…

图数据库Neo4j学习三——cypher语法总结

1MATCH 1.1作用 MATCH是Cypher查询语言中用于从图数据库中检索数据的关键字。它的作用是在图中查找满足指定条件的节点和边&#xff0c;并返回这些节点和边的属性信息。 在MATCH语句中&#xff0c;通过节点标签和边类型来限定查找范围&#xff0c;然后通过WHERE语句来筛选符合…

解决VScode下载太慢的问题记录

最近突然想重新下载vscoded便携免安装版&#xff0c;发现下载很慢&#xff0c;于是乎查询一下&#xff0c;以便记录 下载地址 VScode官方网站&#xff1a; https://code.visualstudio.com/ 根据个人的需求选择下载&#xff0c;页面加载下载需要等一会&#xff0c; 然后就会…

kotlin高阶函数

kotlin高阶函数 函数式API:一个函数的入参数为Lambda表达式的函数就是函数式api 例子: public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {return filterTo(ArrayList<T>(), predicate) }上面这段函数: 首先这个函…

使用EM算法完成聚类任务

EM算法&#xff08;Expectation-Maximization Algorithm&#xff09;是一种基于迭代优化的聚类算法&#xff0c;用于在无监督的情况下将数据集分成几个不同的组或簇。EM算法是一种迭代算法&#xff0c;包含两个主要步骤&#xff1a;期望步骤&#xff08;E-step&#xff09;和最…

态势标绘专题介绍

介绍 这个专栏是专门针对基于Cesium来实现态势标绘的专题专栏,专栏主要实现了30余种态势几何形状的标绘和编辑、文本的标绘和编辑、图片的标绘和编辑以及简单模型的标绘,同时支持标绘结果的导出以及导入。包括最终编写成的一个完整的Vue3.2+TS+Cesium1.107.2的标绘组件。专栏…

Java JVM虚拟机内部体系结构

JVM(Java虚拟机)是一个抽象机器。 它是一个提供可以执行Java字节码的运行时环境的规范。JVM可用于许多硬件和软件平台(即JVM是平台相关的)。 什么是JVM&#xff1f; JVM(Java虚拟机)是&#xff1a; 指定Java虚拟机的工作的规范。 但实现提供程序是独立的选择算法。 其实现是由…

【Hive实战】Hive的压缩池与锁

文章目录 Hive的压缩池池的分配策略自动分配手动分配隐式分配 池的等待超时Labeled worker pools 标记的工作线程&#xff08;自定义线程池&#xff09;Default pool 默认池Worker allocation 工作线程的分配 锁Turn Off ConcurrencyDebuggingConfigurationhive.support.concur…

如何跳出Java中的多层嵌套循环?

在Java中&#xff0c;要跳出多层嵌套循环&#xff0c;可以使用带有标签的break语句。通过在外层循环前加上一个标签&#xff0c;然后在内层循环中使用break语句后跟标签名称&#xff0c;可以实现跳出多层循环的目的。 以下是使用标签和break语句跳出多层嵌套循环的示例代码&…

BUG:pm2启动verdaccio报错:Invalid or unexpected toke

输入命令&#xff1a; pm2 state verdaccio 问题描述&#xff1a; pm2 logs verdaccio报错翻译&#xff1a;数据格式错误 导致我呢提原因&#xff0c;没有找到运行文件&#xff0c; 发现问题&#xff1a;因为命令默认查找verdaccio是去系统盘查找。 解决方式 1&#xff1a;…

Hadoop_HDFS_常见的文件组织格式与压缩格式

参考资料 1. HDFS中的常用压缩算法及区别_大数据_王知无_InfoQ写作社区 2. orc格式和parquet格式对比-阿里云开发者社区 3.Hadoop 压缩格式 gzip/snappy/lzo/bzip2 比较与总结 | 海牛部落 高品质的 大数据技术社区 4. Hive中的文件存储格式TEXTFILE、SEQUENCEFILE、RCFILE…

【家庭公网IPv6】

家庭公网IPv6 这里有两个网站&#xff1a; 1、 IPV6版、多地Tcping、禁Ping版、tcp协议、tcping、端口延迟测试&#xff0c;在本机搭建好服务器后&#xff0c;可以用这个测试外网是否可以访问本机&#xff1b; 2、 IP查询ipw.cn&#xff0c;这个可以查询本机的网络是否IPv6访问…

Java面向对象 - 常用类——Object类

什么是Object类 Java中有一个比较特殊的类&#xff0c;就是 Object类&#xff0c;它是所有类的父类&#xff0c;如果一个类没有使用extends关键字明确标识继承另外一个类&#xff0c;那么这个类就默认继承 Object类。因此&#xff0c;Object 类是 Java 类层中的最高层类&#x…

c++11 标准模板(STL)(std::basic_filebuf)(七)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_filebuf : public std::basic_streambuf<CharT, Traits> std::basic_filebuf 是关联字符序列为文件的 std::basic_streambuf 。输入序…

基于 STM32+FPGA 的通用工业控制器设计(一)系统方案设计

本章首先介绍了现有 PLC 系统的概况&#xff0c;然后提出了本文设计的通用工业控制器的 整体方案架构&#xff0c;分析了硬件和软件上需要实现的功能&#xff0c;最后对各部分功能进行分析并提 出具体的实现方案。 2.1 PLC 系统简介 可编程逻辑控制器&#xff08; Progra…

RocketMQ, Dashboard, 控制台安装

文章说明 本文主要说明RocketMQ的控制台&#xff08;Dashboard&#xff09;的安装过程。工作中一直用的是别人装好的&#xff0c;这次终于自己亲手装了一遍。 由于每次都要启动三个应用&#xff0c;比较烦&#xff0c;于是我写了一键启动脚本&#xff0c;分享给大家。这个脚本…