opencv中的色彩空间及其转换

在 OpenCV 中,色彩空间(Color Space)指的是表示颜色的一种方式,或是用数学模型对颜色的表达。不同的色彩空间采用不同的方式来描述颜色的三要素(如亮度、饱和度、色调),因此可以在不同的应用场景下提供不同的优点。

在计算机视觉和图像处理中,了解和转换不同的色彩空间是非常重要的,因为某些操作(例如,目标检测、图像分割、特征提取等)在某些色彩空间中比在其他色彩空间中更加有效。

1. 常见的色彩空间

OpenCV 支持多种色彩空间的转换。以下是常见的几种色彩空间:

1.1 RGB(Red, Green, Blue)和 BGR(Blue, Green, Red)

RGB:

  • RGB 是最常用的色彩空间,尤其是在显示设备(如显示器、电视)中。每种颜色通道(红、绿、蓝)用一个整数值表示,通常是 0 到 255(即 8 位表示)。
  • 该色彩空间直观且易于理解,主要用于显示和图像采集。每个颜色通道的值分别代表图像中的红、绿和蓝的强度。
BGR:
  • BGR 是 OpenCV 中的默认色彩空间。虽然 RGB 更常见,但 OpenCV 默认读取图像为 BGR 格式。这是因为 OpenCV 设计时参考了早期的一些硬件标准。
  • 在 BGR 色彩空间中,蓝色(Blue)是第一个通道,绿色(Green)是第二个通道,红色(Red)是第三个通道。
  • opencv中imread、imshow、imwrite都是使用的BGR的顺序。
import cv2# 读取 RGB 图像
img_bgr = cv2.imread('./images/bg.jpg')
print(img_bgr.shape)  # 输出图像的尺寸,通常是 (height, width, channels)
print(img_bgr[0, 0, :]) # 查看第一像素的颜色值 [192 162 105] [B,G,R]
cv2.imshow('bgr', img_bgr)img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_RGB2BGR)
print(img_rgb.shape)
print(img_rgb[0, 0, :]) # 查看第一像素的颜色值 [105 162 192] [R,G,B]
cv2.imshow('rgb', img_rgb) # 图像转成RGB后imshow显示会有所变化cv2.waitKey(0)
cv2.destroyAllWindows()
1.3 HSV(Hue, Saturation, Value)
  • HSV 是一种在色彩选择、图像分割和增强中非常常用的色彩空间。它通过三个参数来描述颜色:色调(Hue)、饱和度(Saturation)和明度(Value)。

    • 色调(H):颜色的类型,通常表示为角度,范围为 0° 到 360°,例如,红色为 0°,绿色为 120°,蓝色为 240°。
    • 饱和度(S):颜色的纯度或强度,范围是 0 到 100%。0 表示灰色,100% 表示最纯的颜色。
    • 明度(V):颜色的亮度或亮度,范围是 0 到 100%。0 表示完全黑色,100% 表示最亮的颜色。
  • 在 HSV 空间中,图像的颜色信息更符合人类的视觉感知,通常在图像分割、颜色跟踪等任务中表现优异。

# BGR 转换到 HSV 
img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
print(img_hsv) # (200, 300, 3)
print(img_hsv[0,0,:]) # 第一个像素的hsv值:[100, 116, 192] [h,s,v]
1.4 HLS(Hue, Lightness, Saturation)
  • HLS 色彩空间与 HSV 相似,但将饱和度和亮度的位置交换。HLS 也常用于色彩处理,它比 HSV 更能模拟人眼对颜色的感知。
    • 色调(H):与 HSV 中的色调相同,表示颜色的类型。
    • 亮度(L):亮度的描述,不同于 HSV 中的明度,HLS 中的亮度表现方式与实际视觉体验更接近。
    • 饱和度(S):颜色的饱和度,范围 0 到 100%。
# BGR 转换到 HLS 
img_hls = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HLS)
print(img_hls.shape) # (200, 300, 3)
print(img_hls[0,0,:]) # [100 149 104]
1.5 Lab(CIELAB)
  • Lab 是一种基于人类视觉感知的色彩空间,分为三个通道:

    • L:亮度(Lightness),范围是 0 到 100,0 表示黑色,100 表示白色。
    • a:绿色到红色的色差,负值表示绿色,正值表示红色。
    • b:蓝色到黄色的色差,负值表示蓝色,正值表示黄色。
  • Lab 色彩空间的一个重要特点是它是与设备无关的(与显示设备的亮度、对比度等无关),因此在许多图像处理任务中具有很好的稳定性。

# BGR 转换到 Lab 
img_lab = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2LAB)
print(img_lab.shape) # (200, 300, 3)
print(img_lab[0,0,:]) # [163 117 107]
1.6 YUV
  • YUV 色彩空间常用于视频编码和广播电视等应用。它将颜色分为亮度分量(Y)和色度分量(U 和 V),因此能够更有效地处理视频图像。
    • Y:亮度分量(Luminance),范围是 0 到 255。
    • U 和 V:色度分量,表示色彩信息,范围是 -128 到 127。
# BGR 转换到 YUV 
img_yuv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YUV)
print(img_yuv.shape) # (200, 300, 3)
print(img_yuv[0,0,:]) # [148 150  90]

2. 常见色彩空间转换

OpenCV 提供了非常方便的色彩空间转换函数 cv2.cvtColor。以下是一些常见的色彩空间转换:

  • BGR 到 HSV

    img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
  • BGR 到 RGB

    img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
  • BGR 到 Lab

    img_lab = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2LAB)
  • BGR 到 YUV

    img_yuv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YUV)
  • RGB 到 HSV

    img_hsv = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2HSV)

3. 使用色彩空间的场景

3.1 图像分割

在某些色彩空间(例如 HSV、Lab)中,分割图像中的不同颜色区域比在 RGB 空间中更为简便。例如,我们可以通过设置合适的色调、饱和度和亮度阈值来提取特定颜色的区域。

3.2 目标追踪

HSV 和 HLS 空间的色调分量对于目标追踪特别有效,尤其是在目标的颜色变化较大时,使用色调(H)来进行追踪更为准确。

3.3 颜色校正与增强

Lab 和 YUV 空间在颜色校正和增强中非常常用,特别是在改变图像的亮度、对比度、饱和度时。

4. 总结

OpenCV 支持多种色彩空间,每种色彩空间有其特定的优点,选择合适的色彩空间可以帮助我们更好地完成图像处理任务。常见的色彩空间包括 RGB、BGR、HSV、HLS、Lab 和 YUV,每个空间通过不同的方式表示颜色信息。在进行图像处理时,理解这些色彩空间的特点和如何在它们之间进行转换是非常重要的。

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

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

相关文章

OPPO 数据分析面试题及参考答案

如何设计共享单车数据库的各个字段? 对于共享单车的数据库设计,首先考虑用户相关的字段。用户表可以包含用户 ID,这是一个唯一标识符,用于区分不同用户;姓名,记录用户的真实姓名;联系方式,比如手机号码,方便在出现问题时联系用户;注册时间,记录用户何时开始使用共享…

在Ubuntu下运行QEMU仿真FreeBSD riscv64系统

在Ubuntu下运行QEMU仿真FreeBSD riscv64系统 突发奇想,尝试在Ubuntu下运行QEMU仿真FreeBSD riscv64系统, 参考这篇文档:手把手教你在QEMU上运行RISC-V Linux_qemu 运行 .bin-CSDN博客 并参考FreeBSD的Wiki:riscv - FreeBSD Wik…

大模型微调---Prompt-tuning微调

目录 一、前言二、Prompt-tuning实战2.1、下载模型到本地2.2、加载模型与数据集2.3、处理数据2.4、Prompt-tuning微调2.5、训练参数配置2.6、开始训练 三、模型评估四、完整训练代码 一、前言 Prompt-tuning通过修改输入文本的提示(Prompt)来引导模型生…

Visual Studio 、 MSBuild 、 Roslyn 、 .NET Runtime、SDK Tools之间的关系

1. Visual Studio Visual Studio 是一个集成开发环境(IDE),为开发者提供代码编写、调试、测试和发布等功能。它内置了 MSBuild、Roslyn 和 SDK Tools,并提供图形化界面来方便开发者进行项目管理和构建。与其他组件的关系&#xf…

Winnows基础(2)

Target 了解常见端口及服务,熟练cmd命令,编写简单的 .bat 病毒程序。 Trail 常见服务及端口 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主机管理系统登陆(国外用的…

Edge Scdn用起来怎么样?

Edge Scdn:提升网站安全与性能的最佳选择 在当今互联网高速发展的时代,各种网络攻击层出不穷,特别是针对网站的DDoS攻击威胁,几乎每个行业都可能成为目标。为了确保网站的安全性与稳定性,越来越多的企业开始关注Edge …

通信技术以及5G和AI保障电网安全与网络安全

摘 要:电网安全是电力的基础,随着智能电网的快速发展,越来越多的ICT信息通信技术被应用到电力网络。本文分析了历史上一些重大电网安全与网络安全事故,介绍了电网安全与网络安全、通信技术与电网安全的关系以及相应的电网安全标准…

梯度(Gradient)和 雅各比矩阵(Jacobian Matrix)的区别和联系:中英双语

雅各比矩阵与梯度:区别与联系 在数学与机器学习中,梯度(Gradient) 和 雅各比矩阵(Jacobian Matrix) 是两个核心概念。虽然它们都描述了函数的变化率,但应用场景和具体形式有所不同。本文将通过…

时间序列预测论文阅读和相关代码库

时间序列预测论文阅读和相关代码库列表 MLP-based的时间序列预测资料DLinearUnetTSFPDMLPLightTS 代码库以及论文库:Time-Series-LibraryUnetTSFLightTS MLP-based的时间序列预测资料 我会定期把我的所有时间序列预测论文有关的资料链接全部同步到这个文章中&#…

引言和相关工作的区别

引言和相关工作的区别 引言 目的与重点 引言主要是为了引出研究的主题,向读者介绍为什么这个研究问题是重要且值得关注的。它通常从更广泛的背景出发,阐述研究领域的现状、面临的问题或挑战,然后逐渐聚焦到论文要解决的具体问题上。例如,在这篇关于联邦学习数据交易方案的…

GitLab分支管理策略和最佳实践

分支管理是 Git 和 GitLab 中非常重要的部分,合理的分支管理可以帮助团队更高效地协作和开发。以下是一些细化的分支管理策略和最佳实践: 1. 分支命名规范 • 主分支:通常命名为 main 或 master,用于存放稳定版本的代码。 • …

批量提取zotero的论文构建知识库做问答的大模型(可选)——含转存PDF-分割统计PDF等

文章目录 提取zotero的PDF上传到AI平台保留文件名代码分成20个PDF视频讲解 提取zotero的PDF 右键查看目录 发现目录为 C:\Users\89735\Zotero\storage 写代码: 扫描路径‘C:\Users\89735\Zotero\storage’下面的所有PDF文件,全部复制一份汇总到"C:\Users\89735\Downl…

LabVIEW实现NB-IoT通信

目录 1、NB-IoT通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网…

面试题整理9----谈谈对k8s的理解2

面试题整理9----谈谈对k8s的理解2 1. Service 资源1.1 ServiceClusterIPNodePortLoadBalancerIngressExternalName 1.2 Endpoints1.3 Ingress1.4 EndpointSlice1.5 IngressClass 2. 配置和存储资源2.1 ConfigMap2.2 Secret2.3 PersistentVolume2.4 PersistentVolumeClaim2.5 St…

精准采集整车信号:风丘混合动力汽车工况测试

一 背景 混合动力汽车是介于纯电动汽车与燃油汽车两者之间的一种新能源汽车。它既包含纯电动汽车无污染、启动快的优势,又拥有燃油车续航便捷、不受电池容量限制的特点。在当前环境下,混合动力汽车比纯电动汽车更符合目前的市场需求。 然而&#xff0c…

带标题和不带标题的内部表

什么是工作区? 什么是工作区?简单来说,工作区是单行数据。它们应具有与任何内部表相同的格式。它用于一次处理一行内部表中的数据。 内表和工作区的区别 ? 一图胜千言 内表的类型 有两种类型的内表: 带 Header 行…

【图像分类实用脚本】数据可视化以及高数量类别截断

图像分类时,如果某个类别或者某些类别的数量远大于其他类别的话,模型在计算的时候,更倾向于拟合数量更多的类别;因此,观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…

【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序

问题背景 班里有 m m m 位学生,共计划组织 n n n 场考试。给你一个下标从 0 0 0 开始、大小为 m n m \times n mn 的整数矩阵 s c o r e score score,其中每一行对应一位学生,而 s c o r e [ i ] [ j ] score[i][j] score[i][j] 表示…

React系列(八)——React进阶知识点拓展

前言 在之前的学习中,我们已经知道了React组件的定义和使用,路由配置,组件通信等其他方法的React知识点,那么本篇文章将针对React的一些进阶知识点以及React16.8之后的一些新特性进行讲解。希望对各位有所帮助。 一、setState &am…

PCIe_Host驱动分析_地址映射

往期内容 本文章相关专栏往期内容,PCI/PCIe子系统专栏: 嵌入式系统的内存访问和总线通信机制解析、PCI/PCIe引入 深入解析非桥PCI设备的访问和配置方法 PCI桥设备的访问方法、软件角度讲解PCIe设备的硬件结构 深入解析PCIe设备事务层与配置过程 PCIe的三…