YUV基础知识(转)-程序员宅基地

技术标签: 音视频  

四,视频编码

4.1,颜色空间
YCbCr色彩空间和它的变形(有时被称为YUV)是最常用的有效的表示彩色图像的方法。Y是图像的亮度(luminance/luma)分量,使用以下公式计算,为R,G,B分量的加权平均值:

Y = kr R + kgG + kbB

其中k是权重因数。

其中每个色差分量为R,G,B值和亮度Y的差值:

Cb = B -Y(注释:蓝色的色差)

Cr = R -Y

Cg = G- Y

其中,Cb+Cr+Cg是一个常数(其实是一个关于Y的表达式),所以,只需要其中两个数值结合Y值就能够计算出原来的RGB值。所以,我们仅保存亮度和蓝色、红色的色差值,这就是(Y,Cb,Cr)。

相比RGB色彩空间,YCbCr色彩空间有一个显著的优点。Y的存储可以采用和原来画面一样的分辨率,但是Cb,Cr的存储可以使用更低的分辨率。

在RGB格式中,对于宽度为w,高度为h的画面,需要wh3个字节(注释:一个像素用1个字节)来存储其每个像素的rgb信息,画面的像素数据是连续排列的.

在YUV格式中,以YUV420格式为例。宽度为w高度为h的画面,其亮度Y数据需要wh个字节来表示(每个像素点一个亮度)。而Cb和Cr数据则是画面中4个像素共享一个Cb,Cr值。这样Cb用wh/4个字节,Cr用w*h/4个字节。

YUV的优点:

1、YUV表示法的重要性是它的亮度信号(Y)和色度信号(U、V)是相互独立的 。

2、YUV表示法的另一个优点是可以利用人眼的特性来降低数字彩色图像所需要的存储容量。

————————————————
版权声明:本文为CSDN博主「HardBoy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fanzonghao/article/details/89702742
4.yuv采样

yuv的采样是uv的采样率比y低,但又不会降低视觉质量,因为人眼对于亮度会敏感度较高,对于彩色信息的敏感度较低,色度信号并不是用全分辨率存储的,所以没必要全采样。

目前有YUV444,YUV422,YUV420,YUV411等采样方式。

YUV444:表示每4点Y采样(注释:我理解采样就是对一帧画面的像素做采样),就有4点Cb和4点Cr,每个象素都有与之对应的色度和亮度采样信息;

YUV422:表示每4点Y采样,就有2点Cb和2点Cr,当4:2:2信号被解码的时候,“缺失”的色度采样,通常由一定的内插补点算法通过它两侧的色度信息运算补充;

YUV420:按照字面上理解,4:2:0应该是每4点Y采样,就有2点Cb和0点Cr,但事实上完全不是 这样。事实上,4:2:0的意思是,色度采样在每条横向扫描线上只有亮度采样的一半,扫描线的条数上,也只有亮度的一半!换句话说,无论是横向还是纵向, 色度信号的分辨率都只有亮度信号的一半。举个例子,如果整张画面的尺寸是720480,那么亮度信号是720480,色度信号只有360*240。在 4:2:0中,“缺失”的色度采样不单单要由左右相邻的采样通过内插补点计算补充,整行的色度采样也要通过它上下两行的色度采样通过内插补点运算获得

YUV411:表示每4点Y采样,就有1点Cb和1点Cr,但不是主流的采样方式,这里不祥解;

————————————————
版权声明:本文为CSDN博主「异界工程师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huayu_huayu/article/details/82189324
4:4:4
表示色度没有下采样, 每一个Y对应一组UV分量 即每一个像素都有 y u v 分量, 没有下采样, 跟rgb一样,用的较少。

在这里插入图片描述

如图, 圆圈为uv分量,叉为y分量, 它们的对应关系为一对一, 这图好多博客里有, 源自微软对yuv的官方说明, 我看这图也蒙了好久, 这是怎么存的呢, 想了好久这图跟存储没有任何关系,就是代表对应关系,如何存储就是看FOURCC和packed、planar。
4:2:2
表示2:1的水平下采样,没有竖直下采样。每条扫描线包含4个y对应2个u或者v。即每两个Y共用一组UV分量

在这里插入图片描述


4:2:0
表示2:1的水平下采样, 2:1的竖直下采样,每四个Y共用一组UV分量, 这4个y不是一条线上的4个是一个正方形的4个,
它有两种对应关系, 一种是mpeg1 一种是mpeg2

在这里插入图片描述

上图为mpeg1规定的对应方式

在这里插入图片描述

​上图为mpeg2规定的对应方式

————————————————
版权声明:本文为CSDN博主「刘长福」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012618915/article/details/102822917
注释:

视频原文件每一帧每一个像素其实就用颜色,而且就是由RGB三种颜色的混合。由于人眼对亮度比较敏感,对色度并不是那么敏感,因此可以对RGB做编码,计算出亮度Y,然后色度只需计算出色差就行,反正将来解码时可以根据色差还原出原色。把RGB换算成YUV后,每一帧画面的大小就大大减小了。

对于YUV4:2:0而言,转换为YUV格式时,一帧的所有像素点都要采样亮度,而且是每采样4个像素点,这4个像素点是2 X 2的正方形,也就是水平上采样2个像素点,垂直上采样2个像素点,U和V采样个数是水平和垂直上的Y的一半,这么一算在这个正方形中就只有一个U分量和一个V分量。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a1579990149wqh/article/details/125004507

智能推荐

lua的弱引用__mode(table)_lua mode-程序员宅基地

lua的弱引用__mode(table)网络上在这一方面的介绍实在是太糟糕了(还是我理解无能,随便吧。最近脾气很不好谢谢)如果一个数组,里面有一个table对象,那么即使将这个table赋值为nil,它依然不会被垃圾回收因为数组还存有着对这个对象的引用,显然这样的引用是没有必要的。为了告诉GC,这一部分的引用是没必要的,所以需要将其标记为弱引用。以便GC可以对其进行回收t1, t2 = {..._lua mode

TrWebOCR开源的离线OCR_杨浦老苏的博客-程序员宅基地

什么是 OCR ?OCR(optical character recognition)文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程;即,对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。【百度百科】什么是 Tr ?TR(Text Recognition)是一款针对扫描文档的离线文本识别 SDK,核心代码全部采用 C++ 开发,并提供 Python 接口。什么是 TrWebOCR ?TrWebOCR._trwebocr

PPT中如何插入指定大小的矩阵_ppt中如何打出7×7矩阵-程序员宅基地

1、问题描述:当我们用PPT中插入公式功能插入矩阵的时候发现,工具栏中只给了有限的几项矩阵大小类型,基本不可能满足大多数人的需求,那怎么插入自己需要大小的矩阵呢?2、问题解决:先在工具栏中插入一个任意大小的矩阵,然后右键->数学选项->根据自己所需矩阵大小,选择插入行或列。截图如下:..._ppt中如何打出7×7矩阵

JAVA获取图片大小和尺寸-程序员宅基地

package stone;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import javax.imageio.ImageI

Dynamics CRM 导出系统中实体的属性字段到EXCEL_dynamics监控导出-程序员宅基地

我们在CRM中看元数据信息,可以通过SDK中的metadata browser的解决方案包,但该解决方案包只是在可视化上方便了,但如果我们需要在excel中整理系统的数据字典时这个解决方案包就派不上用场了。 本文介绍一个工具,依旧是xrm toolbox中的,叫metadata document generator 导出格式可以是EXCEL也可以是WORD,导出的_dynamics监控导出

GridView中列表的“双击事件”-程序员宅基地

GridView中列表的“双击事件” 模拟事例:双击列表中的行弹出该行的详细信息解决方案:为每一行添加一个双击事件为列表所在的区域添加双击事件为列表所在的区域添加MouseLeftButtonUp事件,模拟双击为列表所在的区域添加RowA..._c#gridview双击事件

随便推点

Windows10下安装配置Gradle环境_gradle-6.7.1 win10 安装_清晨先生的博客-程序员宅基地

前言Java生态体系中有三大构建工具:Ant、Maven和Gradle。其中,Ant是由Apache软件基金会维护;Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程;Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。经过几年的发展,Ant几乎销声匿迹,而Maven由于较为不灵活的配置也渐渐被遗_gradle-6.7.1 win10 安装

易语言取MySQL错误代码_易语言mysql错误排查-程序员宅基地

因为最近我也收到很多新手经常问的问题:怎么我的语句老是出错,问题都出在哪里呢?我怎么找了一天都找不到问题所在呢?等等的一些新手经常犯的错误!这次我给大家分享一个怎么样来排查问题的!这个是一张表添加的原型!调试出来是-1,这个肯定是不成功!在这里大家要先认识一下“取影响行数()”这个子程序是做什么用的呢?这个的作用就是查看你这次操作数据库里面的数据成功了N行的数据!如果说是正常的添加成功的话这个肯定..._易语言 判断mysql执行是否错误

python中update啥意思_python 列表中的Update()函数-程序员宅基地

简介Python 字典 update() 方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中。语法d.update(e)参数说明将e中键-值对添加到字典d中,e可能是字典,也可能是键-值对序列。详见实例。返回值该方法没有任何返回值。实例以下实例展示了 update() 方法的使用方法:d = {‘one’:1,’two’:2}d.update({‘three’:..._python 列表update

【Java面试题汇总】JVM篇(2023版)_jvm面试题-程序员宅基地

JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优_jvm面试题

Linux下为文件增加列的shell脚本-程序员宅基地

场景:linux有份文件,需要增加一列序号来标记,通过shell脚本来实现。步骤:1)创建一份test.txt文件,内含一列,如下:bash-4.1$ cat test.txtabcde2)创建脚本row_id.sh,如下:bash-4.1$ cat row_id.sh#!/bin/shlines=$1for ((i=1;i<=$lines;i++))do

Git 的安装和连接gitlab_通过git验证gitlab-程序员宅基地

Git的安装安装需要的依赖#yum remove git#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel#yum install gcc perl-ExtUtils-MakeMaker下载新版本的githttps://www.kernel.org/pub/software/..._通过git验证gitlab

推荐文章

热门文章

相关标签