音视频基础之YUV格式

article/2025/9/23 4:03:21

1 YUV格式

1.1 YUV简介

  YUV是一种颜色编码方式,类似于RGB颜色编码方式。YUV将亮度和色度分离,使用Y(明亮度)、U和V(色度、浓度)三个分量表示一个颜色。三个分量中UV分量只有颜色信息,如果图像只有Y分量图像就是黑白图像。一般见到YPbPr、YUV、Y’UV、YCbCr等专有名词描述的都可以成为YUV,不同的是他们使用的具体场景不同(YUV和Y’UV通常用来编码电视的模拟信号、YCbCr用来描述数字影像),在开发的过程中不需要严格区分他们。
  YUV利用人对图像的亮度信息更加敏感的特点,可以有针对性的对UV分量进行降采样。同时,YUV格式能够有效的兼容彩色电视和黑白电视,在过去黑白电视更加普及的情况下该种方式能够保证兼容性。YUV编码格式相比于RGB编码格式更适合于网络编码传输,但是需要注意的是显示设备的相识模式依然为RGB模式,只是中间需要一次转换。

1.2 不同的YUV采样格式

  YUV采样格式有:YUV444、YUV440、YUV422、YUV420和YUV411。采样格式是指按照比例降采样色度分量即UV分量,多个像素中公用一个UV分量来减少带宽。YUVABC格式中表示第一行数据中Y和UV分量采样比例为A:B,第二行数据的Y和UV的采样比例为A:C,而UV采样比例一直是1:1,以此方式不断重复。

  • 4:4:4表示完全取样。
  • 4:4:0表示1:1的水平取样,垂直2:1采样。
  • 4:2:2表示2:1的水平取样,垂直1:1采样。
  • 4:2:0表示2:1的水平取样,垂直2:1采样。
  • 4:1:1表示4:1的水平取样,垂直1:1采样。
    在这里插入图片描述

  也就是说对于16像素8bit(每个像素的一个分量占用8bit)的图像:

  • YUV444占用3×16=48个字节;
  • YUV440占用16+2×2×4=32个字节,是YUV444的 2 3 \frac{2}{3} 32
  • YUV422占用16+2×2×4=32个字节,是YUV444的 2 3 \frac{2}{3} 32
  • YUV420占用16+2×2×2=24个字节,是YUV444的 1 2 \frac{1}{2} 21
  • YUV411占用16+2×2×2=24个字节,是YUV444的 1 2 \frac{1}{2} 21

  为了验证该猜想可以使用ffmpeg命令解码jpeg图像来查看大小:

#将图像缩放成100*100解码成对应的格式,将其中的422换成对应的采样格式就可以
ffmpeg -i .\1.jpg -s 100x100 -pix_fmt yuv422p 100x100_yuv422p.yuv

  对于YUV422格式图像的大小应该为 100 × 100 × 3 × 2 3 = 20000 100×100×3×\frac{2}{3}=20000 100×100×3×32=20000字节。
在这里插入图片描述

1.3 YUV存储格式

  YUV 数据有两种存储格式:平面格式(planar format)和打包格式(packed format)。

  • planar format:先连续存储所有像素点的 Y,紧接着存储所有像素点的 U,随后是所有像素点的 V。
  • packed format:每个像素点的 Y、U、V 是连续交错存储的。

1.4 YUV存储格式

  YUV根据不同的存储格式和不同的采样格式分为多种格式比如NV12,NV21,YUYV等格式,具体的格式后续用到的话会在这里补充。
在这里插入图片描述

1.5 读取YUV数据分离YUV分量

  这里使用YUV420P数据进行分离读取。

void split_yuv420p_yuv2file(const char *yuvfile, int height, int width, const char *yfile, const char *ufile, const char *vfile){FILE *yuvfp = fopen(yuvfile, "rb");FILE *yfp = fopen(yfile, "wb");FILE *ufp = fopen(ufile, "wb");FILE *vfp = fopen(vfile, "wb");if (!(yuvfp && yfp && ufp && vfp)) {return;}long long size = width * height;unsigned char *buffer = (unsigned char*)malloc(size * 3 / 2);fread(buffer, 1, size, yuvfp);fwrite(buffer, 1, size, yfp);fwrite(buffer + size, 1, size / 4, ufp);fwrite(buffer + size + size / 4, 1, size / 4, vfp);free(buffer);fclose(ufp);fclose(vfp);fclose(yfp);fclose(yuvfp);
}

  下面是解析出来的图像的yuv数据和Y分量数据。

在这里插入图片描述在这里插入图片描述

2 RGB格式

2.1 简介

  RGB颜色模式就是使用R、G、B三原色表示颜色的一种编码格式,屏幕的显示方式基本都是RGB显示。RGB格式若按照编码存储方式可以分为RGB555、RGB565、RGB24(RGB888)和RGB32。格式不同是因为在构成一个像素的不同颜色所占的位数以及位数比例不同。

2.2 不同的格式

  • RGB555(高彩色)
    • R = color & 0x7C00, (获取高字节的5个bit)
    • G = color & 0x03E0, (获取中间5个bit)
    • B = color & 0x001F, (获取低字节5个bit)
  • RGB565(高彩色)
    • R = color & 0xF800, (获取高字节的5个bit)
    • G = color & 0x07E0, (获取中间6个bit)
    • B = color & 0x001F, (获取低字节5个bit)
  • RGB24(真彩色)
    • R = color & 0x000000FF
    • G = color & 0x0000FF00
    • B = color & 0x00FF0000
  • RGB32(真彩色)
    • 低8位保留
      • R = color & 0x0000FF00
      • G = color & 0x00FF0000,
      • B = color & 0xFF000000,
    • 低8位为ALPHA值
      • R = color & 0x0000FF00,
      • G = color & 0x00FF0000,
      • B = color & 0xFF000000,
      • A = color & 0x000000FF

在这里插入图片描述

3 RGB和YUV转换关系

  RGB和YUV的转换关系了解一下就行,具体实现有很多种为了保证画面没有色差和丢失的计算方式,可以参考YUV。

在这里插入图片描述

参考

  • yuv-wiki
  • YUV详解
  • 一文理解YUV
  • YUV色彩格式总结
  • 如何理解 YUV ?
  • 视音频数据处理入门:RGB、YUV像素数据处理

http://chatgpt.dhexx.cn/article/M9TG2Vh9.shtml

相关文章

YUV格式与RGB格式

YUV与RGB格式介绍 一、RGB编码格式二、YUV编码格式YUV存储格式(分类):YUV采样方式:常见的YUV格式 三、RGB与YUV转换公式 一、RGB编码格式 RGB图像具有三个通道 R、G、B,分别对应红、绿、蓝三个分量,由三个…

YUV数据格式介绍

YUV图像数据格式介绍 1.yuv格式的分类和介绍 2.YUV三个分量的代表含义 Y分量:表示明亮度(Luma)即灰度值 UY分量:表示色彩和饱和度即图片的颜色 U颜色代表 blue Y 颜色代表red YUV从形式上也可以用YCbCr 表示 3.常见的YUV格式…

YUV 格式详解-史上最全

YUV 格式详解 介绍分类标准具体分类I420(属于 YUV 420 Plannar)YV12(属于 YUV 420 Plannar)NV12(属于 YUV 420 Semi-Planar)NV21(属于 YUV 420 Semi-Planar)I422(属于 YU…

YUV格式说明 YUYV JPEG

YUV420P,Y,U,V三个分量都是平面格式,分为 I420 和 YV12 。 I420 格式和 YV12 格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即&#xff1a…

视频YUV格式详解

YUV三种存储格式 yuv按照存储格式的不同分为三类,平面,半平面和打包格式三种格式。其中I420就是一种平面格式。 平面的YUV格式,就是YUV三种分量分别单独的连续存储,不交叉。先连续存储所有像素点的Y,紧接着存储所有像…

YUV图像的常见格式(图示)

摘要 在研究android Camera2 API的时候,涉及到采集视频信息。其中,在采集视频的时候,可以设置多种类型格式的图像数据,其中一个就是yuv_420_888,如果需要进行编码压缩,我们还需要将该格式的数据转转想要的…

YUV图像格式详解

一、YUV格式 YUV格式有两大类:packed(打包)格式和planar(平面)格式。 packed:通常是几个相邻的像素组成一个宏像素(macro-pixel),每个像素点的Y、U、V是连续交*存储的。 planar:使用三个数组分开存放Y、…

【图像格式】关于YUV格式的一些总结

关于YUV格式的一些总结 一、YUV和YCbCr 1、定义2、区别和联系 二、不同的采样格式 1、YUV4442、YUV4403、YUV4224、YUV4205、YUV4116、YUV410 三、YUV数据排列格式 1、四种数据排列方式 ①Planar Format②Semi-Planar Format③Tiled Semi-Planar Format④Interleaved Format 2…

YUV数据格式

与 RGB 编码方法类似,YUV 也是一种颜色编码方法。其中“Y”表示明亮度(Luminance 或 Luma),也就是灰阶值,U 和 V 表示的则是色度(Chrominance 或 Chroma),分别用 CrCb来表示,作用是描述影像色彩及饱和度,用…

YUV存储格式

YUV存储格式 YUV的存储格式planar(中文翻译:平面的;二维的;平坦的)packed (中文翻译:挤满塞满) YUV的采样方式存储方式YV12在内存中存储NV12在内存中存储YUYVUYVYYU422PYUV420P YUV420SPYUV420SPYUV420PYU1…

YUV格式到底是什么?

简介 YUV是视频、图片、相机等应用中使用的一类图像格式,实际上是所有“YUV”像素格式共有的颜色空间的名称。 与RGB格式(红 - 绿 - 蓝)不同,YUV是用一个称为Y(相当于灰度)的“亮度”分量和两个“色度”分…

YUV格式详解

介绍 我们都知道,YUV是一种表示颜色的模型,另外在大多数情况下,我们所说的YUV与YCbCr是一样的,其中Y指亮度分量,UV和CbCr都是色彩分量。 有一款YUV图像查看工具 YUV Eye ,可以使用这个工具查看YUV图像&am…

图像和流媒体 -- 详解YUV数据格式

如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78283369 我们在讲 FFmpeg 系列的时候,有提到 YUV 的。其中包括YUV播放器、简单的YUV格式介绍。 参看:FFmpeg再学习 -- 视音频基础知识 接下来详细研究一下&#x…

YUV格式详解【全】

YUV格式详解 YUVYUV 采样YUV 4:4:4YUV 4:2:2YUV 4:2:0YUV 4:1:1 planar formatPacked (or Interleaved)PlanarSemi-Planar 关系图 YUV 与 RGB 相互转换计算公式推导1. 模拟 RGB转YUV的推导公式2. 数字 RGB to YUV 1. 模拟YUV→模拟RGB2. 数字YUV→数字RGBYUV与RGB的相互转换会损…

LaTeX Error: Unknown option quiet for package fontspec

编译方式错误,fontspec是基于Xe和Le开发的,所以不能使用pdf**进行编译

Latex Error:Two \documentclass or \documentstyle commands. \documentclass{

今天尝试在latex中使用markdown语法时出现了如下错误: Two \documentclass or \documentstyle commands. \documentclass{ 在网上查找了好多地方,都说是因为用了两次\documentclass命令导致的,可是我能确定我只用了一次\documentclass命令,最后我终于找到了问题所在。因为我的…

介绍Latex神器——Overleaf的方法

向大家介绍2个神网站,一个是腾讯在线文档,一个是overleaf 腾讯在线文档就不多介绍了,可以直接百度网址并使用,它有2个亮点,1.特别简洁,高效。2.可以多人在线,共同编辑同一个文档。(在…

LaTeX:斜线表头的表格制作

参考 LaTeX:斜线表头的表格制作 - 云社区 - 腾讯云 需求:正规表格的左上角"第一个单元是表头",一般都是用"斜线分区"的!本文介绍其实现方法:不仅适用在表头,表中任何一个单元位置都适…

latex报错 Misplaced \noalign.

表格最后一行少了双斜杠\\

3、显示锁和AQS

3、显示锁和AQS 原子操作CAS atom(不可分割) 什么是原子操作?如何实现原子操作? synchronized 基于阻塞的锁机制 可以实现,但会引发以下问题 1、被阻塞的线程优先级很高 2、拿到锁的线程一直不释放锁怎么办&#x…