当前位置: 首页 > news >正文

opencv色彩空间类型转换

文章目录

  • 前言
  • 1. 常见的色彩空间
    • 1.1 BGR (Blue, Green, Red):
    • 1.2 RGB (Red, Green, Blue):
    • 1.3 GRAY (灰度):
    • 1.4 HSV (Hue, Saturation, Value):
    • 1.5 LAB (Luminance, A, B):
    • 1.6 YUV:
  • 2. LAB 与HSV区别


前言

色彩空间类型转换是图像处理中的一个重要概念,用于在不同的色彩空间之间转换图像数据。不同的色彩空间适用于不同的处理任务,例如颜色校正、图像增强、对象检测等。OpenCV 提供了多种色彩空间转换功能,这些转换有助于解决图像处理中的各种问题。

这一章全是理论,枯燥乏味


1. 常见的色彩空间

1.1 BGR (Blue, Green, Red):

这是opencv框架里默认的彩色图像格式,OpenCV 中图像通常以 BGR 格式表示。
作用: 适用于大多数标准的图像处理任务。需要转换到其他色彩空间进行特定的操作。
前面文章有做详细讲解。

BGR图片读取

import cv2# 读取图像,默认以 BGR 格式读取
bgr_image = cv2.imread('image.jpg')

1.2 RGB (Red, Green, Blue):

常见的彩色图像格式,广泛用于图像显示和处理。
作用: 人眼的颜色感知方式。许多图像处理库和图形处理软件使用 RGB 格式。
前面文章有做详细讲解。

RGB图片读取

import cv2# 读取 RGB 图像
rgb_image = cv2.imread('image.jpg', cv2.IMREAD_COLOR)

RGB转BGR

import cv2# 读取 RGB 图像
rgb_image = cv2.imread('image.jpg', cv2.IMREAD_COLOR)# 转换为 BGR 色彩空间
bgr_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2BGR)

1.3 GRAY (灰度):

将彩色图像转换为灰度图像,去除颜色信息,只保留亮度信息。
作用: 常用于图像分析、边缘检测和图像增强。
前面文章有做详细讲解。

import cv2# 读取图像为灰度图
gray_image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

GRAY转BGR

import cv2# 读取图像为灰度图
gray_image = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)# 将灰度图像转换为 BGR 图像
bgr_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR)

1.4 HSV (Hue, Saturation, Value):

HSV 色彩空间(Hue, Saturation, Value)是一种用于图像处理和颜色选择的色彩模型,它模拟了人类对颜色的感知方式。
这种模型常用于图像编辑、图像分割和计算机视觉任务,因为它将颜色的不同特性分离成三个独立的分量,使得颜色调整和处理更加直观。
前面文章有做详细讲解。

HSV 色彩空间的三个分量

  1. H (Hue): 色相,表示颜色的种类或色调。色相分量定义了颜色的基本类型,例如红色、绿色、蓝色等。其范围通常为 0 到 360 度:

    • 0° 或 360°: 红色
    • 120°: 绿色
    • 240°: 蓝色
  2. S (Saturation): 饱和度,表示颜色的纯度或强度。饱和度分量决定了颜色的强度,值越高颜色越纯,值越低颜色越接近灰色。范围通常为 0% 到 100%:

    • 0%: 无颜色(灰色)
    • 100%: 最纯的颜色
  3. V (Value): 明度,表示颜色的亮度或强度。明度分量决定了颜色的亮度,值越高颜色越亮,值越低颜色越暗。范围通常为 0% 到100%:

    • 0%: 完全黑色
    • 100%: 最亮的颜色

HSV 色彩空间的特点

  1. 直观性: HSV色彩空间提供了一种更加直观的方式来调整颜色,因为它将颜色的色调、饱和度和亮度分开处理。用户可以独立调整这些参数,从而方便地选择和修改颜色。

  2. 颜色选择和调整: 在图像处理软件和图形编辑应用中,HSV 色彩空间常用于颜色选择工具和滑块,因为它允许用户更容易地选择和调整颜色。

  3. 图像分割: 在计算机视觉任务中,HSV 色彩空间常用于图像分割和特征提取,因为它可以更容易地分离颜色信息,尤其是在变化的光照条件下。

opencv不支持直接读取HSV格式,需要先以BGR格式读取图片,然后再转成HSV格式

import cv2# 读取图像,默认以 BGR 格式读取
bgr_image = cv2.imread('image.jpg')# 将 BGR 图像转换为 HSV 色彩空间
hsv_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2HSV)

1.5 LAB (Luminance, A, B):

Lab 色彩空间(或 CIELAB 色彩空间)是一种用于图像处理和颜色分析的色彩模型,由国际照明委员会(CIE)定义。
目的是提供一种与人眼感知一致的颜色表示方式。(怎么感觉跟HSV有点一样?)

Lab 色彩空间由三个通道组成:

  • L (Lightness): 明度通道,表示颜色的亮度。L 值的范围通常是 0 到 100,其中 0 表示黑色,100 表示白色。
  • a (a Channel): 色彩通道,表示从绿色到红色的范围。负值表示绿色,正值表示红色。
  • b (b Channel): 色彩通道,表示从蓝色到黄色的范围。负值表示蓝色,正值表示黄色。

Lab 色彩空间的特点:

  • 与人眼感知一致: Lab 色彩空间设计为与人眼感知的颜色差异一致,因此它对于颜色比较和颜色差异分析非常有用。
  • 设备无关: Lab 色彩空间与设备的显示特性无关,适合用于颜色校正和颜色转换。。

Lab作用:
1. 颜色校正
Lab 色彩空间用于颜色校正,因为它提供了与人眼感知一致的颜色表示。L*(亮度)分量与 a* 和 b*(色度)分量分开,使得可以精确调整图像的颜色和亮度。通过在 Lab 色彩空间中调整颜色,可以有效地进行颜色校正和修正。

2. 颜色匹配
在印刷和数字媒体中,Lab 色彩空间常用于颜色匹配,因为它能准确地描述颜色差异。Lab 色彩空间中的颜色差异(例如 ΔE)可以用于评估两个颜色的相似度,这对于确保不同设备和介质之间的一致性非常重要。

类似于 HSV 色彩空间,OpenCV 不支持直接以 Lab 色彩空间读取图像。图像通常以 BGR 格式读取,你需要先读取图像为BGR格式,然后将其转换为 Lab 色彩空间。

import cv2# 读取图像,默认以 BGR 格式读取
bgr_image = cv2.imread('image.jpg')# 将 BGR 图像转换为 Lab 色彩空间
lab_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2Lab)

1.6 YUV:

YUV 色彩空间是一种用于图像和视频处理的色彩模型,尤其在视频压缩和广播中使用广泛。
它将图像的颜色信息分解为亮度和色度分量,以便于图像压缩和处理。

YUV 色彩空间的分量

  • Y (Luminance): 亮度分量,表示图像的明暗信息。Y 分量决定了图像的亮度,而不包含颜色信息。范围通常是 0 到 1 或 0 到 255(在 8 位图像中)。Y 分量可以单独用来描述图像的亮度信息。
  • U (Chrominance Blue): 色度蓝分量,表示蓝色成分的色度信息。U 分量描述了颜色的蓝色成分。它的范围通常是 -0.5 到 0.5 或 -128 到 127(在 8 位图像中)。
  • V (Chrominance Red): 色度红分量,表示红色成分的色度信息。V 分量描述了颜色的红色成分。它的范围通常是 -0.5 到 0.5 或 -128 到 127(在 8 位图像中)。

YUV 色彩空间的特点

  • 亮度和色度分离: YUV 色彩空间将亮度(Y)和色度(U 和 V)信息分开,使得色度信息可以以较低的分辨率进行采样,从而减少数据量。这对于视频压缩和传输非常有效,因为人眼对亮度变化更敏感,对色度变化不那么敏感。
  • 用于视频压缩: YUV 色彩空间常用于视频编码和压缩,如 MPEG 和 JPEG,因为它允许将亮度和色度信息分开处理,从而提高压缩效率。
  • 广播和视频处理: 在电视广播和视频处理领域,YUV 色彩空间被广泛使用。例如,PAL 和 NTSC 等模拟电视标准使用 YUV 色彩空间。

YUV 变换

  • 从 RGB 转换到 YUV: 图像从 RGB 色彩空间转换为 YUV 色彩空间,可以使用以下公式:

{ Y = 0.299 R + 0.587 G + 0.114 B U = − 0.147 R − 0.289 G + 0.436 B V = 0.615 R − 0.515 G − 0.100 B \left \{ \begin{array}{l} Y=0.299R+0.587G+0.114B \\ U=−0.147R−0.289G+0.436B \\ V=0.615R−0.515G−0.100B \end{array} \right. Y=0.299R+0.587G+0.114BU=0.147R0.289G+0.436BV=0.615R0.515G0.100B

  • 从 YUV 转换到 RGB: 反向转换公式为:
    { R = Y + 1.13983 V G = Y − 0.39465 U − 0.58060 V B = Y + 2.03211 U \left \{ \begin{array}{l} R=Y+1.13983V \\ G=Y−0.39465U−0.58060V \\ B=Y+2.03211U \\ \end{array} \right. R=Y+1.13983VG=Y0.39465U0.58060VB=Y+2.03211U

OpenCV 不支持直接以 YUV 色彩空间读取图像。

import cv2# 读取图像,默认以 BGR 格式读取
bgr_image = cv2.imread('image.jpg')# 将 BGR 图像转换为 YUV 色彩空间
yuv_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2YUV)

2. LAB 与HSV区别

Lab 和 HSV 是两种不同的色彩空间,各自具有不同的用途和特点。

Lab特点:

  • 与人眼感知一致: Lab 色彩空间设计用于更准确地反映人眼对颜色的感知。它能更好地表示颜色差异,适合用于颜色比较和分析。

  • 设备无关: Lab 色彩空间不依赖于具体的设备(如显示器或打印机),因此非常适合用于颜色校正和匹配。

  • 用途广泛: 常用于图像处理、颜色校正、图像分析等领域。

HSV特点:

  • 直观: HSV 色彩空间在颜色调整和选择时非常直观。例如,可以很容易地调整颜色的色相、饱和度和亮度。

  • 常用于图像处理: HSV 色彩空间常用于图像分割、颜色滤波和增强等处理任务,因为其分量(特别是色相和饱和度)与实际视觉感受较为一致。

  • 用途广泛: 适用于图像编辑软件和计算机视觉任务。

总结比较

  • Lab 色彩空间更注重颜色差异和人眼感知的准确表示,适合于颜色校正和颜色分析。它是一个设备无关的色彩空间。

  • HSV 色彩空间更适合进行直观的颜色调整和处理,如图像分割和颜色滤波。它的直观特性使得在图像编辑和计算机视觉中非常有用。

在实际应用中,选择哪种色彩空间取决于具体的任务需求。Lab 适合于需要精确颜色表示和差异分析的场景,而 HSV 适合于需要直观操作和处理的场景。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LLM微调(精讲)-以高考选择题生成模型为例(DataWhale AI夏令营)
  • 前端创作纪念日
  • go语言协程之间的同步
  • 第十章、 异常Exception
  • 东土科技车规级网络芯片获批量应用
  • leetcode300. 最长递增子序列,动态规划附状态转移方程
  • Android 让程序随系统自动启动并允许后台运行(白名单)
  • arch linux 安装Budgie桌面
  • MySQL约束
  • 一、软件工程概述
  • 网络协议十 应用层 SPDY / HTTP2 / QUIC / HTTP3
  • 使用mybatis注解和xml映射执行javaWeb中增删改查等操作
  • Day18 Linux系统编程学习--文件
  • Java 中的面向对象编程 (OOP) 概念
  • 解析Java中1000个常用类:ListResourceBundle类,你学会了吗?
  • 【刷算法】求1+2+3+...+n
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 10个确保微服务与容器安全的最佳实践
  • create-react-app做的留言板
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • nodejs实现webservice问题总结
  • orm2 中文文档 3.1 模型属性
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Webpack 4x 之路 ( 四 )
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 如何学习JavaEE,项目又该如何做?
  • 使用common-codec进行md5加密
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​​​​​​​​​​​​​​Γ函数
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • (1)(1.11) SiK Radio v2(一)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (floyd+补集) poj 3275
  • (javaweb)Http协议
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (强烈推荐)移动端音视频从零到上手(上)
  • (一)为什么要选择C++
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Google的Objective-C编码规范
  • (转)Unity3DUnity3D在android下调试
  • (转)Windows2003安全设置/维护
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .Net Core 中间件验签
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net dataexcel 脚本公式 函数源码
  • .Net 高效开发之不可错过的实用工具
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .net经典笔试题