YUV数据图形化理解

news2024/11/28 2:55:24

以下为音视频基础数据的图像化展示,方便大家理解

RGB24

RGB交替排列,RGBRGBRGB

占用空间Width*Height*3

YUV420P

YU12(I420)

每4个Y分量,共一个UV分量

Y是连续的,U也是连续的,V也是连续的

占用空间 Width*Height + Width*Height/4 + Width*Height/4

每4个Y分量,共一个UV分量

Y是连续的,U也是连续的,V也是连续的,只是V在U前面

占用空间 Width*Height + Width*Height/4 + Width*Height/4

        

YUV420SP

NV12

每4个Y分量,共一个UV分量

Y是连续的,UV是交替存放的,先U后V

占用空间 Width*Height + Width*Height/4 + Width*Height/4

NV21

每4个Y分量,共一个UV分量

Y是连续的,UV是交替存放的,先V后U

占用空间 Width*Height + Width*Height/4 + Width*Height/4

YUV422P

每两个Y分量,共一个UV分量

Y是连续的,U是连续的,V也是连续的

占用空间Width *Height + Width*Height/2 +Width*Height/2

        

YUYV422

每两个Y分量,共一个UV分量

YUV是间隔排列,按照 YUYV依次排列

占用空间Width *Height + Width*Height/2 +Width*Height/2

YUV444P

每一个Y分量对应一个U分量,对应一个V分量

占用空间Width *Height*3

结论:1. YUV各种格式体现的是其Y:U:V的排列方式和占比。

           2.理解这些就很容易看懂,比如以下代码:

YUV422:

YUV是间隔排列,按照 YUYV依次排列

大小为 2 * w * h

I420:

Y是连续的,U也是连续的,V也是连续的 

大小为 1.5 * w * h

1.Y分量0,2,4,6,8 这样隔一个取,I420连续存放

2.U分量1,5,9,13隔4个取一个

3.V分量3,7,13,17隔4个取一个

解析: yuv422[i * 2 * width + 4 * j + 1] 即 每行坐标每行起始位置(i * 2 * width)+ 每行偏移(4 * j + 1)

解析: yuv420[ynum + k * 2 * width / 4 + j]   即 每行坐标 =Y偏移(ynum)+ 行高(K)* 行宽(2 * width) /4 + 偏移(j)

为何除以4?

                          *2                                  /4

0,2,4,6,8 ==》0,4,8,12,16==》0,1,2,3,4 

即yuv420得到的是连续的角标

当然我们用其他的方式遍历,搞懂原理,大家各显神通

int YUV422To420(unsigned char yuv422[], unsigned char yuv420[], int width, int height)
{
 
	int ynum = width * height;
	int i, j, k = 0;
	//得到Y分量
	for (i = 0; i < ynum; i++) {
		yuv420[i] = yuv422[i * 2];
	}
	//得到U分量
	for (i = 0; i < height; i++) {
		if ((i % 2) != 0)continue;
		for (j = 0; j < (width / 2); j++) {
			if ((4 * j + 1) > (2 * width))break;
			yuv420[ynum + k * 2 * width / 4 + j] = yuv422[i * 2 * width + 4 * j + 1];
		}
		k++;
	}
	k = 0;
	//得到V分量
	for (i = 0; i < height; i++) {
		if ((i % 2) == 0)continue;
		for (j = 0; j < (width / 2); j++) {
			if ((4 * j + 3) > (2 * width))break;
			yuv420[ynum + ynum / 4 + k * 2 * width / 4 + j] = yuv422[i * 2 * width + 4 * j + 3];
 
		}
		k++;
	}
 
 
	return 1;
}

了解基本的YUV基础后,推荐一款libyuv的工具库,作为参考,方便我们后期功能的实现

GitHub - Yangandmore/libyuv_original: 补充libyuv功能的库,使libyuv更加完善

以下为其部分API

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/940286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北京筑龙受邀出席中物联“采购供应链中国行—走进雄安”活动

日前&#xff0c;“采购供应链中国行—走进雄安”活动在河北雄安新区成功举办&#xff0c;来自30家相关单位的50余名领导和代表参加了本次活动。活动由中国物流与采购联合会公共采购分会主办&#xff0c;中国物流与采购联合会采购委、中国雄安集团有限公司、河北雄安新区招标投…

【Apollo】阿波罗自动驾驶系统:驶向未来的智能出行(含源码安装)

前言 Apollo (阿波罗)是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 开放能力、共享资源、加速创新、持续共赢是 Apollo 开放平台的口号。百度把自己所拥有的强大、…

VMware 助力企业轻松驾驭生成式 AI 的力量

在 8 月 23 日的 VMware Explore 2023 大会上&#xff0c;VMware&#xff08;NYSE&#xff1a;VMW&#xff09;推出全新 Private AI 产品&#xff0c;助力企业采用生成式 AI 并挖掘可信数据的价值。Private AI 是一种架构方案&#xff0c;可解锁 AI 商业效益并满足企业实际隐私…

【实用黑科技】息声后的元宇宙踪迹——“创世界社区“,普通人构建游戏世界将会越来越容易

在这里插入图片描述 &#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于…

基于Java swing和mysql实现学生信息管理系统(源码+数据库+运行指导视频)

一、项目简介 本项目是一套基于Java swing和mysql实现学生信息管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过…

Nginx+Tomcat的动静分离与负载均衡

目录 前言 一、案例 二、Nginx的高级用法 三、tomcat部署 四、Nginx部署 五、测试 总结 前言 通常情况下&#xff0c;一个 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等情况&#xff0c;不能单独应用于生产环境下&#xff0c;所以我们需要一套更…

展会动态 | 迪捷软件邀您参加【AUTOSEMO“恒以致远,共创共赢”主题研讨会】

大会简介 2023年&#xff0c;中国汽车工业迎来70年华诞&#xff0c;仅用70年&#xff0c;中国就已建成全球规模最大、品类最齐全、配套最完整的汽车工业体系。 中国汽车工业协会软件分会中国汽车基础软件生态标准专委会&#xff08;China Automotive Basic Software Ecosyste…

FusionAD:用于自动驾驶预测和规划任务的多模态融合

论文背景 自动驾驶&#xff08;AD&#xff09;任务通常分为感知、预测和规划。在传统范式中&#xff0c;AD中的每个学习模块分别使用自己的主干&#xff0c;独立地学习任务。 以前&#xff0c;基于端到端学习的方法通常基于透视视图相机和激光雷达信息直接输出控制命令或轨迹…

19- 富文本tinymce 和 二进制模型BLOB(表情存储)

富文本tinymce 中文文档: TinyMCE中文文档中文手册 (1). 下载(5.2.2版本) -> 解压放到 static 文件下 (2). static / js / tiny.js 设置富文本 二进制模型BLOB(表情存储) (1). 定义模型类型 # 两种方式: # 1. 定义模型类为Text,直接修改数据库类型为BLOBcontent db.Colum…

KalmanFilter卡尔曼滤波

预测&#xff08;prediction&#xff09; 状态变量 x k A x k − 1 B u k − 1 w k − 1 x_k Ax_{k-1} Bu_{k-1} w_{k-1} xk​Axk−1​Buk−1​wk−1​ 其中n维向量 x k x_k xk​为k时刻的系统状态变量&#xff0c;n维向量 x k − 1 x_{k−1} xk−1​是k-1时刻的系统状…

Docker容器学习:搭建私有镜像仓库Harbor操作

目录 系统环境&#xff1a; 安装Docker-Compose 下载并安装Harber 启动Harbor 使用Harbor 上传下载镜像到harbor仓库 系统环境&#xff1a; Centos7.9Docker-ce:24 安装Docker-Compose curl -L "https://github.com/docker/compose/releases/download/v2.20.3/do…

【JUC系列-03】熟练掌握Atomic原子系列基本使用

JUC系列整体栏目 内容链接地址【一】深入理解JMM内存模型的底层实现原理https://zhenghuisheng.blog.csdn.net/article/details/132400429【二】深入理解CAS底层原理和基本使用https://blog.csdn.net/zhenghuishengq/article/details/132478786【三】熟练掌握Atomic原子系列基本…

Gossip协议

Gossip协议 一、Gossip协议1.1 工作原理1.2 Gossip优点1.3 Gossip传播方式1.3.1 Anti-Entropy&#xff08;反熵&#xff09;1.3.2 Rumor-Mongering&#xff08;谣言传播&#xff09;1.3.3 结合 1.4 Gossip协议的通信方式1.4.1 Push1.4.2 Pull1.4.3 Push&Pull 二、手撸简易版…

媒介盒子:医疗软文怎么写才能实现营销效果?

随着互联网的快速发展,医疗行业也逐渐意识到了网络营销的重要性。而作为网络营销的一种形式,医疗软文在传播医疗知识、宣传医疗品牌方面具有独特的优势。本文将从选题、内容、形式等多个方面进行探讨&#xff0c;如何写一篇有效的医疗营销软文&#xff1f; 1、选题非常关键 首…

Python“牵手”天猫商品列表数据,关键词搜索天猫API接口数据,天猫API接口申请指南

天猫平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;天猫API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问天猫平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现天猫平台…

MySql014——分组的GROUP BY子句排序ORDER BYSELECT子句顺序

前提&#xff1a;使用《MySql006——检索数据&#xff1a;基础select语句&#xff08;使用products表、查询单列、多列、所有列、DISTINCT去除重复行、LIMIT限制返回结果的行数、了解完全限定&#xff09;》中创建的products表 一、GROUP BY子句基础用法 SELECT vend_id, COU…

【Debug】解决RecursionError: maximum recursion depth exceeded in comparison报错

&#x1f680;Debug专栏 目录 &#x1f680;Debug专栏 ❓❓问题&#xff1a; &#x1f527;&#x1f527;分析&#xff1a; &#x1f3af;&#x1f3af;解决方案&#xff1a; ❓❓问题&#xff1a; 循环中报错RecursionError: maximum recursion depth exceeded in compari…

IC设计各岗位收入水平对比,看看哪个更适合你?

根据人才招聘平台对于2023年已有数据统计&#xff0c;芯片工程师岗位均薪为26012元&#xff0c;位列全行业第一。 这里需要说明一下&#xff0c;这里的“芯片工程师”涵盖了设计、制造、封测等多环节岗位。并非只有芯片设计岗。 从行业招聘薪酬同比增速来看&#xff0c;电子技…

Bigemap在路桥行业是怎么应用的?

选择Bigemap的原因&#xff1a; 奥维下架了&#xff0c;后来了解到的bigemap&#xff0c;于是测试了这款软件 使用场景&#xff1a; 下载影像、矢量路网做前期策划&#xff0c;下载完数据后导出cad ,做一些标注&#xff0c;最终出图下载等高线&#xff0c;作为前期选址依据 …

Linux环境下SVN服务器的搭建与公网访问:使用cpolar端口映射的实现方法

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…