首页 > 其他分享 >OpenCV基础:色彩空间之YUV

OpenCV基础:色彩空间之YUV

时间:2025-01-13 15:30:53浏览次数:3  
标签:cv2 RGB 亮度 YUV OpenCV 色度 色彩 分量

YUV 色彩模型

YUV 是另一种常见的色彩空间,主要用于视频处理和图像压缩。与 RGB 色彩模型不同,YUV 是基于亮度(Luminance)和色度(Chrominance)来描述颜色的模型。在 YUV 中:

  • Y 代表亮度分量(Luminance),也就是图像的灰度信息。
  • UV 代表色度分量(Chrominance),用于表示图像的颜色信息。

 1. YUV 组成

Y (Luminance, 亮度分量)

亮度分量 Y 表示图像的灰度级别。Y 的值决定了图像的明暗程度,与颜色无关。

Y 的范围通常为 0 到 255(8 位色深),0 表示黑色,255 表示白色。

U 和 V (Chrominance, 色度分量)

  • U 和 V 是色度分量,分别表示色彩的蓝色色差和红色色差。它们包含了图像的颜色信息。
  • U 分量表示颜色中的蓝色与亮度的差异(通常为蓝色色差)。
  • V 分量表示颜色中的红色与亮度的差异(通常为红色色差)。
  • U 和 V 的范围通常为 -128 到 +128(8 位有符号整数),其中 0 表示没有色偏。

2. YUV 色彩空间的特点

  • 分离亮度与色度信息:YUV 模型将亮度和色度分离,使得图像的亮度信息和颜色信息分开处理。这使得 YUV 在视频压缩和传输中具有优势,因为亮度(Y)对人眼的敏感度高,而色度(U、V)对视觉效果的影响较小,压缩时可以对色度部分进行更多的压缩。

  • 适合视频压缩与传输:由于人眼对亮度变化比对色度变化更敏感,YUV 色彩模型可以在视频编码(如 MPEG、JPEG、H.264 等)中将亮度部分与色度部分分开处理,从而更有效地压缩视频数据,减少带宽和存储需求。

3. YUV 和 RGB 的转换

RGB 到 YUV 转换公式

Y = 0.299 \times R + 0.587 \times G + 0.114 \times B

U = -0.147 \times R - 0.289 \times G + 0.436 \times B

V = 0.615 \times R - 0.515 \times G - 0.100 \times B

其中,R,G,BR, G, BR,G,B 是 RGB 颜色模型中的红、绿、蓝分量。

YUV 到 RGB 转换公式

R = Y + 1.402 \times (V - 128)

G = Y - 0.344136 \times (U - 128) - 0.714136 \times (V - 128)

B = Y + 1.772 \times (U - 128)

这里的 U 和 V 分量经过了偏移(加减 128)来适应 RGB 的值域。

4. 常见的 YUV 采样格式

YUV 颜色模型有多种不同的表示形式,最常见的采样格式包括以下几种:

YUV 4:4:4

  • 每个像素都有独立的 Y、U 和 V 分量,表示每个像素的亮度和色度信息。即 Y、U、V 分量的采样率是相同的。
  • 这种格式没有丢失任何色度信息,图像质量最好,但存储和传输数据量大。

YUV 4:2:2

  • 每两个像素共享一个 U 分量和一个 V 分量。即在水平方向上,每个色度分量的采样率是亮度分量的一半。
  • 这种格式在保证图像质量的同时,减少了数据量,广泛用于视频编码和传输。

YUV 4:2:0

  • 每四个像素共享一个 U 分量和一个 V 分量。即在水平方向和垂直方向上,色度分量的采样率都是亮度分量的一半。
  • 这种格式在视频压缩(如 MPEG 和 H.264)中非常常见,能大幅减少数据量,适合传输和存储。

YUV 4:1:1

  • 每四个像素共享一个 U 分量和一个 V 分量。在水平分量上进行采样压缩,但与 YUV 4:2:2 类似,垂直方向上不进行压缩。
  • 这种格式相对较少见,但在某些特定应用中仍然使用。

5. YUV 的优势

  • 高效压缩:由于 YUV 色彩空间的亮度和色度分离,压缩算法可以重点压缩色度信息,因为人眼对亮度变化比对色度变化更敏感。这使得 YUV 在视频编码和传输中更加高效。

  • 适用于视频传输:YUV 模型通常用于视频数据的存储、传输和处理,因为它能够更好地适应带宽限制,并且可以有效地压缩数据。

  • 与显示设备兼容:许多电视和视频显示系统(如 PAL、NTSC 等)使用 YUV 色彩模型进行视频信号的传输。

6. YUV 与 RGB 的应用场景对比

  • RGB:广泛应用于显示设备(如计算机显示器、电视、数字图像处理)中,因为它直接与显示设备的原理匹配。
  • YUV:主要用于视频压缩、传输和存储中,因为它适合分离亮度和色度信息,可以更高效地进行数据压缩。很多视频编码标准(如 MPEG、H.264、VP8)使用 YUV 格式进行视频压缩。

7. 在 OpenCV 中转换 YUV 和 RGB

在 OpenCV 中,通常使用 cv2.cvtColor 函数进行 YUV 与 RGB 之间的转换。以下是一个简单的例子,展示如何将图像从 RGB 转换为 YUV:

import cv2

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

# 转换为 YUV 格式
image_yuv = cv2.cvtColor(image_rgb, cv2.COLOR_BGR2YUV)

# 显示图像
cv2.imshow('YUV Image', image_yuv)
cv2.waitKey(0)
cv2.destroyAllWindows()

8. 总结

  • YUV 是基于亮度(Y)和色度(U、V)分量的色彩模型,广泛应用于视频处理、压缩和传输中。
  • YUV 能够将亮度和色度信息分开,有助于高效的视频压缩和带宽节省。
  • 常见的 YUV 采样格式包括 4:4:4、4:2:2、4:2:0 和 4:1:1,不同的格式具有不同的数据量和图像质量之间的平衡。
  • YUV 色彩模型在视频领域中的应用非常广泛,尤其在压缩和传输中,能够大大减少数据量,提升效率。

标签:cv2,RGB,亮度,YUV,OpenCV,色度,色彩,分量
From: https://blog.csdn.net/u011186532/article/details/145030591

相关文章

  • OpenCV基础:色彩空间之HSV
    HSV(色调、饱和度、明度)模型HSV是一种用于表示颜色的色彩空间模型,它通过三个分量来描述颜色:H(Hue,色调):表示颜色的类型,通常是一个角度值,范围是0°到360°,对应不同的颜色。例如:0°对应红色,120°对应绿色,240°对应蓝色。S(Saturation,饱和度):表示颜色的纯度或强度,范围......
  • 车道偏离预警(LDW)、车道保持辅助(LKA)、车道线检测-OpenCV、Python-滑动窗口、透视变
    车道偏离预警、车道保持辅助及车道线检测系统引言一、代码和文件1.项目文件说明2.项目的依赖包和环境3.运行代码二、整体代码逻辑1.相机校准2.车道检测/跟踪3.车道状态分析4.车道映射三、相机校准1.计算摄像机矩阵和失真系数四、图像和视频的处理步骤1.进行......
  • SCI科研论文配色方案:色彩丰富的情况下就是白背景;浅色系
    SCI科研论文配色方案浅蓝:E7EFFA浅粉:F7E1ED浅绿:AOEEE1色彩丰富的情况下就是白背景;浅色系一般采用渐变色-中间渐变柱状图,直线图配色#2F7FC1RGB:47127193#E7EFFARGB:231239250#96C37DRGB:150195125#D8383A#F7E1EDRGB:247225237#F8F3F9RGB:248243......
  • OpenCV基础:鼠标控制
    在OpenCV中,setMouseCallback是一个用于设置鼠标事件回调函数的接口。当你希望在显示的图像窗口中捕捉用户的鼠标操作(如点击、移动、按下或释放)时,这个接口非常有用。它允许你通过一个回调函数来处理用户的鼠标事件,从而进行交互式图像处理。setMouseCallback的作用setMous......
  • OpenCV基础:TrackBar控件实战
    在OpenCV中,createTrackbar和getTrackbarPos是用于创建和获取滑动条(Trackbar)控件的函数,常用于图像处理或调参界面的交互式应用。通过滑动条,用户可以动态调整参数(如图像处理中的阈值、滤波器强度等),并实时查看效果。 createTrackbar作用:在窗口中创建一个滑动条,允许用户通......
  • OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
    本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。原文链接:干货|深度学习模型训练和部署的基本步骤    训练深度学习模型的过程需要管理许多不同的步骤和组件。从数据准备到模型评估,每个步骤对于确保模型的成功都至关重要。 1.数据验证   ......
  • python学opencv|读取图像(三十一)缩放图像的三种方法
    【1】引言前序学习进程中,我们至少掌握了两种方法,可以实现对图像实现缩放。第一种方法是调用cv2.resize()函数实现,相关学习链接为:python学opencv|读取图像(三)放大和缩小图像_pythonopencv读取图片缩放-CSDN博客第二种方法是在cv2.getRotationMatrix2D()函数旋转缩放图像时,......
  • python学opencv|读取图像(三十)使用cv2.getAffineTransform()函数倾斜拉伸图像
    【1】引言前序已经学习了如何平移和旋转缩放图像,相关文章链接为:python学opencv|读取图像(二十七)使用cv2.warpAffine()函数平移图像-CSDN博客python学opencv|读取图像(二十八)使用cv2.getRotationMatrix2D()函数旋转缩放图像-CSDN博客在此基础上,我们尝试倾斜拉伸图【2】核心代码......
  • OpenCV版本冲突解决
    前文提示,本文只是记录笔者成功的经历,方便笔者日后自行查看,故相对于其他文章并没有这么全面 推荐查看文章已放在文章末尾,推荐自行查看下载opencv源码https://opencv.org/releases/点进链接选择自己需要的版本即可(笔者使用的是3.4.5)问题描述笔者在编译开源代码时候,由于......
  • OpenCV相机标定与3D重建(53)解决 Perspective-3-Point (P3P) 问题函数solveP3P()的使
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述根据3个3D-2D点对应关系找到物体的姿态。cv::solveP3P是OpenCV中的一个函数,用于解决Perspective-3-Point(P3P)问题。该问题的目标是根据给定的三个空间点(世界坐标系中......