YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)
背景:
概览:
之所以提出yuv格式的原因,是为了解决彩色电视和黑白电视兼容性问题。与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
yuv种类分为很多,可以理解是一个二维的,即"空间-间",和"空间-内"这样的表述,借鉴了h264中的帧间和帧内的思想。
为什么这么说呢?
下面分别从这两种情况阐述一下这个观点:
空间-间:
不同空间,即描述一个像素的bit数不同,比如yuv444,yuv422,yuv411,yuv420 空间-内:
相同空间,即描述一个像素的bit数相同,但是存储方式不同,比如对于yuv420而言,又可细分为yuv420p,yuv420sp,nv21,nv12,yv12,yu12,I420
因此,我们在理解yuv格式时,时刻需要记住要从bit数,和存储结构两方面考察
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) +
Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) +
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) +
YUV 转换成 RGB
R = 1.164(Y - ) + 1.596(V -)
G = 1.164(Y - ) - 0.813(V -) - 0.391(U - )
B = 1.164(Y - ) + 2.018(U - )

YUV数据的存储方式






public static void rotateYUV240SP(byte[] src,byte[] des,int width,int height)
{
int wh = width * height;
//旋转Y
int k = ;
for(int i=;i<width;i++) {
for(int j=;j<height;j++)
{
des[k] = src[width*j + i];
k++;
}
}
for(int i=;i<width;i+=) {
for(int j=;j<height/;j++)
{
des[k] = src[wh+ width*j + i];
des[k+]=src[wh + width*j + i+];
k+=;
}
}
}
YV12 : 亮度(行×列) + U(行×列/) + V(行×列/)
I420 : 亮度(行×列) + V(行×列/) + U(行×列/)
YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)的更多相关文章
- 音视频编解码: YUV采样格式中的YUV444,YUV422,YUV420理解
YUV各种采样格式的说明 通常我们用RGB表示一种彩色.计算机系统里的LCD显示的数据就是RGB来表示每个像素的颜色.而在我们生活里,有黑白电视机与彩色电视机两种,拍摄节目源时不可以用两种不同的摄像机 ...
- 音视频编解码: YUV存储格式中的YUV420P,YUV420SP,NV12, NV21理解(转)
概述 之前介绍了YUV码流的采样格式,下面分析下YUV码流的存储格式,YUV码流的存储格式与采样格式息息相关.总的来讲,YUV存储格式主要分为两种: planar 平面格式 指先连续存储所有像素点的 ...
- 图像原始格式(YUV444 YUV422 YUV420)一探究竟
前段时间搞x264编码测试,传参的时候需要告诉编码器我的原始数据格式是什么,其中在x264.h头文件中定义了如下一堆类型. /* Colorspace type */ #define X264_CSP ...
- YUV422 YUV420 Planar \ Semi-Planar \ Interleaved YCbCr与YUV
YCbCr是DVD.摄像机.数字电视等消费类视频产品中,常用的色彩编码方案.YCbCr 有时会称为 YCC..Y'CbCr 在模拟分量视频(analog component video)中也常被称为 ...
- yuv422/yuv420格式
关于YUV格式 转载:http://www.cnblogs.com/soniclq/archive/2012/02/02/2335974.html YUV 格式通常有两大类:打包(packed)格式和 ...
- YUV422 YUV420 Planar \ Semi-Planar \ Interleaved
关于yuv 格式 YUV 格式通常有两大类:打包(packed)格式和平面(planar)格式.前者将 YUV 分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);而 ...
- 【OpenGL】用OpenGL shader实现将YUV(YUV420,YV12)转RGB-(直接调用GPU实现,纯硬件方式,效率高)
这段时间一直在搞视频格式的转换问题,终于最近将一个图片的YUV格式转RGB格式转换成功了.下面就来介绍一下: 由于我的工程是在vs2008中的,其中包含一些相关头文件和库,所以下面只是列出部分核心代码 ...
- YV12 NV12区别
用videoCapture和IAMStreamConfig拿到的支持的格式列表.发现支持2中图像格式,YV12和NV12.具体是怎么样的内存分布不知道.查了些文档.自己修改了几个图.看出了点端倪 YV ...
- YUV422/YUV420播放
YUV播放器,directX,VS2008 MFC完成 CSDN下载 http://download.csdn.net/detail/xjt1988xjt/2386621#comment 默认是播放 ...
随机推荐
- [WC2018]通道(乱搞,迭代)
[洛谷题面]https://www.luogu.org/problemnew/show/P4221 这个题以及[CTSC2018 暴力写挂]都有类似的乱搞做法能通过考场数据. 具体搞法就是随一个起点, ...
- gitlab相关命令操作
[root@xuegod63 ~]# git config --global user.name "zsl3"[root@xuegod63 ~]# git config --glo ...
- pycharm自定义代码段
PyCharm使用技巧:Live Templates(快速输入自定义代码片段):链接
- 02-06Android学习进度报告六
今天学习了关于Android开发中常用的两个知识,即对话框和悬浮框. 首先我学习了对话框的基本使用流程 Step 1:创建AlertDialog.Builder对象: Step 2:调用setIcon ...
- Atcoder Beginning Contest 134E(二分查找(upper_bound),思维)
#include<bits/stdc++.h>using namespace std;int a[100007],f[100007],ans,n;int main(){ cin>&g ...
- [Android实例] Android网络收音机项目(内含源码)
======================帖子内容===================================最近喜欢听广播,但是搜索了一下,苦于网上没有Android的网络收音机项目的例 ...
- Linux centosVMware 告警系统主脚本、告警系统配置文件、告警系统负载脚本、告警系统502日志脚本、告警系统disk监控脚本、告警系统邮件引擎
一.告警系统主脚本 要求:我们的机器角色多种多样,但是所有机器上都要部署同样的监控系统,也就说所有机器不管什么角色,整个程序框架都是一致的,不同的地方在于根据不同的角色,定制不同的配置文件. 程序架构 ...
- Ubuntu18.04-MySQL8.0-表名大小写敏感-远程连接
1.卸载 停止服务 sudo service mysql stop 删除mysql服务 sudo apt-get remove mysql-server 删除其他组件 sudo apt-get aut ...
- 什么是Device ID?
Android ID用于唯一识别一部设备的一次刷机行为,虽然不能完全确定该设备的唯一性(真的唯一性是用IMEI号的),但是可以很大程度上过滤重复设备.这是移动互联网广告行业的基础,尤其是CPI广告,设 ...
- <audio>音频标签
<audio ref="audio" @canplay="ready" @error="error" @timeupdate=&qu ...