当前位置:网站首页>颜色编码格式介绍
颜色编码格式介绍
2022-06-12 13:26:00 【Li.CQ】
颜色编码格式简单分类
- YUV
- YUV444
- YUV 4:2:2
- YUV 4:2:0
- YUV420sp
- NV12
- NV21
- YUV420p
- YU12
- YV12
- YUV420sp
- RGB
分级介绍
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
YUV格式的两大类
- planar : 先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
- packed : 每个像素点的Y,U,V是连续交*存储的。
常用的YUV格式:
- YUV444: 每一个Y对应一组UV分量, 1 像素的rgb数据占用的内存为 8 + 8 + 8 = 24bit = 3byte;
- YUV422: 每两个Y共用一组UV分量, 1 像素的rgb数据占用的内存为 8 + 4 + 4 = 16bit = 2byte;
- YUV420: 每四个Y共用一组UV分量, 1 像素的rgb数据占用的内存为 8 + 2 + 2 = 12bit = 1.5byte;
YUV420p
YUV420p:又叫planer平面模式,Y ,U,V分别再不同平面,也就是有三个平面。
- YU12 (I420, 安卓的模式) : 存储顺序是先存Y,再存U,最后存V。 如:YYYYYYYYUUVV;
- YV12: 存储顺序是先存Y,再存U,最后存V。 如: YYYYYYYYVVUU;
YUV420sp
YUV420sp:又叫bi-planer或two-planer双平面,Y一个平面,UV在同一个平面交叉存储.
- NV12 (iOS中只有这个模式) : 存储顺序是先存Y,再UV交替存储。 如:YYYYYYYYUVUV;
- NV21(安卓的模式): 存储顺序是先存Y, 再VU交替存储。 如: YYYYYYYYVUVU;
计算大小
Y分量 width * height = Y(总和)
U分量 Y/4 = U; V分量 = Y/ 4;
所以YUV420的数据在内存中的长度是 width * height * 3 / 2 (一个YUV 占用 1.5个字节); 所以采集一个数据的大小是 width * height * 1.5 * 帧率 * time;
一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3字节;
所以通常在采集到RGB24后, 需要对这个格式的额数据进行一次压缩处理, 将图像的颜色空间由RGB 转为 YUV; 这样不仅可以减少数据量, 而且X264在进行编码的时候, 需要标准的YUV420格式; 然后 通过 一些编码算法, 数据会大大减小, 然后 将编码后的数据打包, 进行RTP实时传输, 在接收端 ,接收到数据后进行解码之后通过OpenGL 渲染到屏幕上, 或者将YUV420转为RGB24后渲染到屏幕上;
在iOS中
在iOS中 使用 相机 或者 创建解码器, 或者创建渲染缓冲区; 都需要指定 PixelFormatType; 但是iOS 中硬解码默认只支持NV12的格式, 在PixelFormatType的枚举中, 一共有以下四种
- kCVPixelFormatType_420YpCbCr8Planar
- kCVPixelFormatType_420YpCbCr8PlanarFullRange
- kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
- kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
字面上可以看出, 前连个是YUV420p的格式, 就是三个平面的 后面两个是两个平面的, 或者是 调用 CVPixelBufferGetPlaneCount(pixel)函数获取平面数量, 也会得到相同的结论; 但是范围缩小到后两个;
假如视频的 分辨率是 480*640 (差别是 计算的步长不一样) 最后确定使用 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange;
- kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange : Y和UV的步长是480(实际长度,未补齐) Y的行宽是640,UV行宽是320
- kCVPixelFormatType_420YpCbCr8BiPlanarFullRange : Y和UV的步长是512(采用了64字节对齐 非对齐的补0) Y的行宽是640,UV行宽是320
边栏推荐
猜你喜欢

Chrome debugging tool

成功跳槽阿里,进阶学习

The goods are full. You must take this knowledge

Vant tab bar + pull-up loading + pull-down refresh demo van tabs + van pull refresh + van list demo

Build an embedded system software development environment - build a cross compilation environment

torch_geometric message passing network

创新实训(十)高级界面美化

LeetCode滑动窗口刷题总结

Getting to know blob objects

Application of binary search -- finding the square root sqrt of a number
随机推荐
[you code, I fix] whitesource was officially renamed mend
torch_ About the geometric Mini batch
Application of bit operation in C language
jupyternotebook有汉字数据库吗。在深度学习中可以识别手写中文吗
Pre research of image scanning tool
创新实训(十)高级界面美化
Stm32f1 and stm32subeide programming example - device driver -dht11 temperature sensor driver
软件构造 03 正则表达式
Experience and learning path of introductory deep learning and machine learning
Bitmap, bloom filter and hash sharding
What if the MySQL installation on the apple computer is completed and cannot be found
C language [23] classic interview questions [2]
【云原生 | Kubernetes篇】Kubernetes 网络策略(NetworkPolicy)
Online picture material
C#DBHelper_ FactoryDB_ GetConn
"New continent" of mobile application going to sea
R language ggplot2 visualization: use the ggrep package to add a number label to the data point at the end of the line plot
Openstack network
看完这一篇就够了,web中文开发
VGA display color bar and picture (FPGA)