opencv色彩空间类型转换


前言

色彩空间类型转换是图像处理中的一个重要概念,用于在不同的色彩空间之间转换图像数据。不同的色彩空间适用于不同的处理任务,例如颜色校正、图像增强、对象检测等。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 适合于需要直观操作和处理的场景。

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hola173841439

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值