YUV格式图像基础yuv是一种类似rgb的颜色模型,起源于黑白和彩电的过渡时期 。其中Y代表亮度,uv组合起来可以表示色度 。yuv信息只有y的信息就足以显示黑白的图片,yuv和YCbCr表示相同的东西,且Cb严格对应U,Cr严格对应V,yuv和rgb可以通过固定公式进行转换 。
yuv转rgb:
rgb转yuv:
yuv主流的采样方式有yuv4:4:4、yuv4:2:2、yuv4:2:0 。下图中以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量,可以看到这些采样方式是影响uv的采样的,对y都是全部采样 。
可以看到,yuv格式图像信息可以比rgb格式占用的字节码更少,所以可以用yuv来传输色彩数据,接收到yuv数据后再转换为rgb来显示图像,从而减少了传输图像占用的带宽 。
yuv衍生出了很多格式,主要是由于其存储方式决定的 。
packed存储的yuv的存储先后不同,细分为了yuv、yvu、yvyu、uyvy等等 。
【yuv420 yuv】 planar存储的yuv依据数组数量分成了yuv分别三个数组表示的完全平面的,以及y一个数组而uv一个数组的半平面(Semi planar)的两类,而半平面的又可以细分为uv和vu两个存储顺序 。
I420: YYYYYYYY UU VV=YUV420P
YV12: YYYYYYYY VV UU=YUV420P
NV12: YYYYYYYY UVUV=YUV420SP
NV21: YYYYYYYY VUVU=YUV420SP //安卓Camera默认格式
涉及到摄像头帧图像处理的应用经常需要操作Yuv数据帧,例如镜像、加滤镜等 。
操作yuv图像可以直接使用google开源的libyuv库,提供了对yuv图像的格式转换、缩放、裁剪、旋转、镜像等操作: 谷歌git libyuv,github上有人用其做了简单的安卓版本的demo: 安卓libyuvDemo,包含了基础的yuv库的使用逻辑,但是该项目没有同步谷歌libyuv更新 。
参考链接:
谷歌git libyuv
[安卓libyuvDemo
yuv图片格式yuv格式是一种图片储存格式,跟RGB格式类似 。yuv中,y表示亮度,单独只有y数据就可以形成一张图片,只不过这张图片是灰色的 。u和v表示色差(u和v也被称为:Cb-蓝色差,Cr-红色差) 。最早的电视信号,为了兼容黑白电视,采用的就是yuv格式 。一张yuv的图像,去掉uv,只保留y,这张图片就是黑白的 。yuv可以通过抛弃色差来进行带宽优化 。比如yuv420格式图像相比RGB来说,要节省一半的字节大小,抛弃相邻的色差对于人眼来说,差别不大 。
yuv图像占用字节数为 :
size = width * height + (width * height) / 4 + (width * height) / 4
RGB格式的图像占用字节数为:
size = width * height * 3
RGBA格式的图像占用字节数为:
size = width * height * 4
yuv420也包含不同的数据排列格式:I420,NV12,NV21.
I420格式:y,u,v 3个部分分别存储:Y0,Y1…Yn,U0,U1…Un/2,V0,V1…Vn/2
NV12格式:y和uv 2个部分分别存储:Y0,Y1…Yn,U0,V0,U1,V1…Un/2,Vn/2
NV21格式:同NV12,只是U和V的顺序相反 。
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v',表示输出的视频格式为NV12;范围: (luma=[16,235] chroma=[16,240])
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange = '420f',表示输出的视频格式为NV12;范围: (luma=[0,255] chroma=[1,255])
kCVPixelFormatType_32BGRA = 'BGRA', 输出的是BGRA的格式
什么是YUV title: 什么是YUV流
author: litchi
date: 2021-09-21 10:31:51
categories: 音视频
keywords: 视频流
description:
tags:
ty说明:
1.视频裸流代表什么?
2.YUV数据表示什么?
3.YUV420编码是什么格式?
帧是视频流的基本元素,yuv是视频帧的一种格式(类似于图片的RGB格式/模式) 。
相对于色彩度,人对亮度更敏感 。
Y代表 灰阶值(明亮度),UV代表色度(色彩及饱和度)
参考
常见的采样格式:YUV444、YUV422和YUV420 。(数字部分表示二次采样率,J:a:b模式,J:表示参考像素值,也可以理解为亮度样本数,a:表示水平相邻色度样本数;b:表示垂直方向相邻色度样本数)
YUV444:全采样,每个像素的Y、U、V通道都保留;
YUV422:四像素中水平采样两个色度样本,垂直采用两个样本,即八个像素中采用四个色度样本,是全采样的二分之一 。
YUV420:四像素中水平采样两个色度样本,垂直不采样,即八个像素中采用两个色度样本,是全采样的四分之一 。
参考
每秒传输的帧数,视频帧率不小于24fps,人眼会觉得视频是连贯的,即“视觉暂留” 。
文章插图