opencv(4):颜色空间

文章目录

颜色空间

不同色彩空间显示效果是不一样的。

RGB 人眼的色彩空间

HSV 色彩空间

HSV 代表色相(Hue)、饱和度(Saturation)、明度(Value),这三个分量描述了颜色的不同方面:

  • 色相(Hue): 表示颜色的种类,以角度度量(0°到360°)。常见的颜色如红、绿、蓝等都有特定的色相值。
  • 饱和度(Saturation): 表示颜色的纯度或灰度。饱和度为0时,颜色变成灰度,为1时,颜色是完全饱和的。
  • 明度(Value): 表示颜色的明亮程度。数值范围从0到1,其中0代表黑色,1代表最亮的颜色。

opencv 倾向于使用 hsv.

python 复制代码
import cv2
import numpy as np

# 读取图像
image = cv2.imread('example.jpg')

# 将图像从 BGR 转换为 HSV
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

HSL

HSL 是另一种颜色空间,表示颜色的方式与 RGB 和 HSV 略有不同。HSL 代表色相(Hue)、饱和度(Saturation)、亮度(Lightness),这三个分量描述了颜色的不同方面:

  • 色相(Hue): 表示颜色的种类,以角度度量(0°到360°)。HSL 色相与 HSV 色相是相同的。
  • 饱和度(Saturation): 表示颜色的纯度或灰度。饱和度为0时,颜色是灰度的,为1时,颜色是完全饱和的。
  • 亮度(Lightness): 表示颜色的相对亮度。数值范围从0到1,其中0代表黑色,0.5是中间的灰度,1代表最亮的颜色。

HSL 色彩空间同样常用于图像处理和计算机视觉任务中。在 OpenCV 中,你同样可以使用 cv2.cvtColor 函数将图像从其他颜色空间(如 BGR)转换为 HSL。

HSL 用的比较少。

YUV

主要用在视频中。

YUV 是一种将亮度(Luminance)和色度(Chrominance)分离的颜色编码方式,常用于视频压缩和图像处理。YUV 的表示方式包括 Y、U、V 三个分量:

  • Y(亮度): 表示图像的亮度信息,即灰度信息。Y 分量用于表示黑白图像的亮度,与 RGB 的灰度表示类似。
  • U(蓝色色度): 表示蓝色的色度信息。U 分量描述了图像中蓝色和黄色的变化。在 YUV 中,U 分量越大,蓝色越强,越小则黄色越强。
  • V(红色色度): 表示红色的色度信息。V 分量描述了图像中红色和绿色的变化。在 YUV 中,V 分量越大,红色越强,越小则绿色越强。

YUV 主要应用于视频编码和传输领域,其中 Y 分量用于表示亮度信息,而 U 和 V 分量则用于表示颜色信息。通过将颜色信息与亮度信息分离,可以更有效地进行压缩,因为人眼对亮度的感知更为敏感,而对颜色的感知相对较弱。

在 OpenCV 中,你可以使用 cv2.cvtColor 函数将图像从其他颜色空间(如 BGR)转换为 YUV。例如:

python 复制代码
import cv2
import numpy as np
# 读取图像
image = cv2.imread('example.jpg')
# 将图像从 BGR 转换为 YUV
yuv_image = cv2.cvtColor(image, cv2.COLOR_BGR2YUV)

YUV420、YUV422、YUV444 是 YUV 颜色编码的不同变体,它们主要区别在于亮度(Y)和色度(U、V)分量的采样方式和存储结构。

YUV420:

采样方式: Y 分量进行全采样,而 U 和 V 分量进行水平和垂直方向的子采样。通常是 4:2:0 的采样方式,表示每 4 个 Y 值对应 2 个 U 和 2 个 V 值。

存储结构: 以块为单位存储,每个块中包含多个 Y、U、V 像素。Y 采样密集,而 U 和 V 采样相对稀疏。这是最常用于视频压缩的一种格式。

YUV422:

采样方式: Y 分量进行全采样,而 U 和 V 分量进行水平方向的子采样。通常是 4:2:2 的采样方式,表示每 4 个 Y 值对应 2 个 U 和 2 个 V 值。

存储结构: 类似 YUV420,以块为单位存储,但 U 和 V 采样略为密集,相对于 YUV420,存储要求更高。

YUV444:

采样方式: Y、U、V 分量均进行全采样,没有子采样。每个 Y、U、V 都有一个对应的采样值。

存储结构: 每个像素都有对应的 Y、U、V 值,存储密集。这是最高质量的 YUV 变体,但也需要更多的存储空间。

这些变体在视频压缩和传输中具有不同的应用场景。YUV420 常用于广播电视和视频流,因为它在保持相对较高图像质量的同时,能够更有效地压缩数据。YUV444 则通常用于图像和视频编辑等对图像质量要求较高的场景。

颜色空间转换代码示例

python 复制代码
import cv2

def callback(userdata):
    pass
cv2.namedWindow('color', cv2.WINDOW_NORMAL)
img = cv2.imread('./RMB.jpeg')
colorspaces = [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA, 
               cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV, 
               cv2.COLOR_BGR2YUV]
cv2.createTrackbar('curcolor', 'color', 0, 4, callback)
while True:
    index = cv2.getTrackbarPos('curcolor', 'color')
    #颜色空间转换API
    cvt_img = cv2.cvtColor(img, colorspaces[index])
    cv2.imshow('color', cvt_img)
    key = cv2.waitKey(10)
    print(key)
    if key & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()
相关推荐
沧海归城4 分钟前
Halcon_图像分割
图像处理·opencv·计算机视觉
二闹28 分钟前
OpenCV识物:用代码“认出”物体
后端·opencv
byxdaz21 小时前
GStreamer与OpenCV集成
opencv·gstreamer
WXX_s21 小时前
【OpenCV篇】OpenCV——03day.图像预处理(2)
人工智能·python·opencv·学习·计算机视觉
Tony沈哲1 天前
OpenCV 图像调色优化实录:基于图像金字塔的 RAW / HEIC 文件加载与调色实践
opencv·算法
那雨倾城1 天前
PiscCode使用OpenCV实现漂浮方块特效
python·opencv
大魔王(已黑化)1 天前
OpenCV —— 绘制图形
人工智能·opencv·计算机视觉
bright_colo1 天前
Python-初学openCV——图像预处理(四)——滤波器
python·opencv·计算机视觉
Mikowoo0071 天前
09_opencv_遍历操作图像像素
opencv·计算机视觉
230L1_78M69Q5487H1 天前
【基于OpenCV的图像处理】图像预处理之二值化处理以及图像的仿射变换
图像处理·opencv·计算机视觉