c++ ffmpeg 浅谈YUV444、YUV422、YUV420(2)
本期将会给大家介绍YUV相关基础知识,同时也介绍威创网络分布式系统的卓越色彩处理技术。
1.什么是YUV色彩空间
2.YUV采样格式
3.YUV不同采样格式对图像画质的影响分析
一、什么是YUV色彩空间?
YUV是视频、图片、相机等应用中常常使用的一类图像格式,是所有“YUV”像素格式共有的颜色空间的名称。与RGB格式(红-绿-蓝)不同,YUV格式用一个称为Y(相当于灰度)的“亮度”分量和两个“色度”分量表示,分别称为U(蓝色投影)和V(红色投影)。对于同一个观测像素点,在RGB空间和YUV空间可进行了不同角度的表示,两者满足单射线性变换,两者可以通过线性变换公式进行转换,如图1所示。

图1 RGB空间与YUV空间
YUV也可以称为YCbCr,虽然这些术语定义略有不同,但它们往往会混淆并可互换使用。
Y表示亮度分量:如果只显示Y的话,图像看起来会是一张黑白照。
U(Cb)表示色度分量:B-Y,图像蓝色部分去掉亮度,反映了RGB输入信号蓝色部分与RGB信号亮度值之间的差异。
V(Cr)表示色度分量:R-Y,图像红色部分去掉亮度,反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。
二、YUV采样格式
从前述定义中,可以了解YUV空间描述RGB空间的像素颜色按“亮度”分量和两个“色度”分量进行了表示。这种编码表示也更加适应于人眼,据研究表明,人眼对亮度信息比色彩信息更加敏感。而YUV下采样就是根据人眼的特点,将人眼相对不敏感的色彩信息进行压缩采样,得到相对小的文件进行播放和传输。
1)YUV444
色度信号分辨率最高的格式是YUV4:4:4,每4点Y采样,就有相对应的4点U和4点V。换句话说,每个Y值对应一个U和一个V值。在这种格式中,色度信号的分辨率和亮度信号的分辨率是相同的。这种格式主要应用在视频处理设备内部,避免画面质量在处理过程中降低。

图2 YUV444采样格式
一种简单的YUV444区分方法:如图2所示,4个Y值,第1行获得4组UV色度值(如像素1、2、3、4均可独立表示),第2行也获得4组UV色度值(如像素5、6、7、8均可独立表示)。
2)YUV422
色度信号分辨率格式YUV4:2:2,每4点Y采样,就有相对应的2点U和2点V。可以看到在水平方向上的色度表示进行了2倍下采样,因此YUV422色度信号分辨率是亮度信号分辨率的一半。

图3 YUV422采样格式
一种简单的YUV422区分方法:如图3所示,4个Y值,第1行获得2组UV色度值(其中像素1、2合并为1组UV值表示,3、4合并为1组),第2行获得2组UV色度值(其中像素5、6合并为1组,7、8合并为1组)。
3)YUV420
色度信号分辨率格式YUV4:2:0,每4点Y采样,就有相对应的1点U和1点V。YUV420色度信号分辨率是亮度信号分辨率的1/4。

图4 YUV420采样格式
一种简单的YUV420区分方法:如图4所示,4个Y值,第1行获得2组UV色度值(其中1、2合并为1组,3、4合并为1组),第2行获得0组UV色度值(5-8像素的色度值全丢弃)。即在水平方向压缩的基础上,再在垂直方向上再进行了压缩。
三、YUV不同采样格式对图像画质的影响分析
根据前述的YUV采样格式分析,这里我们分析一下对图像画质的影响。我们将一个原始图像为8*8像素的红蓝相间的图案,分别按YUV444、YUV422、YUV420不同的采用格式采样,然后再还原输出。
图5(a):我们可以看到YUV444的色度信号的分辨率和亮度信号的分辨率无损失,我们获得了与原始图案一致的还原画面图案。
图5(b):YUV422获得还原图案在水平方向上,已经出现了丢失,从绿色所框选的像素来看,YUV422在水平方向上丢失了另一个像素点的色彩值,故在画面还原时仅是对前一个像素值简单的复制重构。
图5(c):YUV420获得还原图案在水平方向以及垂直方向上,均出现了丢失,获得的还原图像与原始图像出现很大的失真。

图5 YUV不同采样格式对图像画质
由图5所示的直观观测,对图像高频细节的图像表达上,YUV444优于YUV422,YUV422优于YUV420。
在信号传输带宽的节省上,YUV420效率优于YUV444,YUV422优于YUV444。因此在普通的视频编解码算法上,为节省传输带宽开销,普遍采用YUV420或者YUV422的采样格式。
相关文章:
c++ ffmpeg 浅谈YUV444、YUV422、YUV420(2)
本期将会给大家介绍YUV相关基础知识,同时也介绍威创网络分布式系统的卓越色彩处理技术。 1.什么是YUV色彩空间 2.YUV采样格式 3.YUV不同采样格式对图像画质的影响分析 一、什么是YUV色彩空间? YUV是视频、图片、相机等应用中常常使用的一类图像格式,是…...
Redis在Windows下安装配置教程
Redis是一个开源的高性能键值对存储数据库,常用于缓存、消息队列等场景。本文将介绍如何在Windows系统下安装配置Redis。 1. 下载地址 Redis官方网站提供了Windows版本的安装包下载地址,网址为:https://github.com/tporadowski/redis/relea…...
数据库服务器
数据库服务器,联系Web服务器与DBMS的中间件是负责处理所有的应用程序服务器,包括在web服务器和后台的应用程序或数据库之间的事务处理和数据访问。 基本信息 中文名 数据库服务器 外文名 database server 功能 数据库服务器建立在数据库系统基础上&a…...
VS输出路径和生成事件
在生成时,常常希望输出文件夹整洁,因此需要设置dll或exe输出位置,同时也希望对一些文件做一些特殊操作 VS的 UI 常用缩写 “./”:代表目前所在的目录。 " . ./"代表上一层目录。 “/”:代表根目录。 生成…...
从 WebKit 看浏览器内核架构
浏览器常见的浏览器内核有:Blink、WebKit、Gecko、Trident 等,目前 WebKit 内核占据了非常大的的市场,包括 Chrome、Safari、安卓浏览器等市面上的主流浏览器,都使用了 WebKit 内核。 从 WebKit 看浏览器内核架构 既然 WebKit 这么…...
使用原生的 JavaScript,不依赖于任何特定的库与 ROSBridge进行通信
使用原生的 JavaScript,不依赖于任何特定的库与 ROSBridge进行通信 创建与 ROS 的连接: var rosbridge_url "ws://localhost:9090"; var ws new WebSocket(rosbridge_url);ws.onopen function(event) {console.log(Connected to rosbri…...
MATLAB第十章_图像处理算法
目录 图像处理算法 图像处理基础 图像处理函数 默认显示方式 添加颜色条 显示多帧图像 显示动画 三维材质图像 图像的直方图 灰度变换 均衡直方图 图像处理应用 图像增强 图像重建 图像变换 图像压缩 图像分割 图像边缘检测 图像识别 图像处理算法 图像处理…...
RobotFramework接口测试方案
1. Robot FrameWork介绍 1.1 介绍 Robot Framework是用于验收测试和回归测试的通用测试自动化框架。它使用易于理解的表格数据语法,非常友好的实现了关键字驱动和数据驱动模式。它的测试功能可以通过使用Python或Java实现的测试库进行扩展,用户可以使用…...
chatgpt赋能python:Python中日期转换:从字符串到日期对象
Python中日期转换:从字符串到日期对象 作为一个经验丰富的Python工程师,日期转换在我的日常编码工作中经常遇到。Python提供了一些内置函数和模块,可以将字符串转换为日期对象或将日期对象格式化为特定的字符串。本篇文章将带您深入了解Pyth…...
k8s 1.27新特性in-place使用方法:避坑指南(官方文档有坑,已提issue)
背景 按照官方文档试用新版的in-place特性时,一字不差地执行了,但是却出现了执行失败的情况: 执行kubectl -n qos-example patch pod qos-demo-5 --patch {"spec":{"containers":[{"name":"qos-demo-ct…...
网络传输(传输介质、通信方式、交换方式)
目录 一、传输介质1.双绞线2.网线安装3.光纤4.无线信道 二、通信方式、交换方式1.通信方式2.同步方式3.交换方式 一、传输介质 1.双绞线 双绞线:将多根铜线按规则缠绕在一起,能够减少干扰;分为无屏蔽双绞线UTP和屏蔽双绞线STP,都…...
【Unity】Time.deltaTime有什么用?看完你就明白
大多数刚开始使用 Unity 的人(包括我),都会对Time.deltaTime感到迷惑。 看完本文,你就会明白Time.deltaTime的定义及作用。 1、deltaTime是什么? 根据定义,Time.deltaTime是每一帧之间的时间间隔(以秒为单位)。 这有助于我们使游戏与帧数无关,也就是说,无论 fps 是…...
vue实现用户动态权限登录
一、使用vueelementUI搭登录框架,主要就是1、2、3、4 配置: ①vue.config.js use strict const path require(path)function resolve(dir) {return path.join(__dirname, dir) }// All configuration item explanations can be find in https://cli.v…...
ONNX模型修改为自定义节点
参考一 首先,需要将ONNX模型中的节点修改为自定义节点。要实现这一点,您需要了解自定义节点的定义和如何在ONNX中使用它们。ONNX定义了一个自定义运算符的接口,您可以使用该接口定义自己的运算符,并将其编译为ONNX模型可以识别的…...
内存对齐原则
struct (1)结构体第一个数据成员放在offset为0的地方,后面每个成员相对于结构体首地址的偏移量(offset)都是成员大小(该变量类型所占字节)的整数倍,如有需要编译器会在成员之间加上填…...
Java SPI 一 之SPI(Service Provider Interface)进阶 AutoService
一、SPI(Service Provider Interface) 1.1 介绍 SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制(为某个接口寻找服务实现的机制),可以用来启用框架扩展和替换组件,其…...
C++ list类成员函数介绍
目录 🤔list模板介绍: 🤔特点: 🤔list内存结构图解: 🤔 list的成员函数: 😊list构造函数: 🔍代码示例: 🔍运行结果&…...
【服务器】本地搭建PHP简单Imagewheel私人云图床
文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…...
第四十二回:DateRangePickerDialog Widget
文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了DatePickerDialog Widget相关的内容,本章回中将介绍 DateRangePickerDialog Widget.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的DateRangePickerDialog是一种弹出窗口,只不…...
【C++系列P3】‘类与对象‘-三部曲——[基础知识](1/3)
前言 大家好吖,欢迎来到 YY 滴 C系列 ,热烈欢迎! 【 类与对象-三部曲】的大纲主要内容如下: 如标题所示,本章是【 类与对象-三部曲】三章中的第一章节——基础知识章节,主要内容如下: 目录 一.…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
