视频,图像,像素,分辨率,RGB, YUV简单说明

文中图片源于李超老师,仅作个人笔记

目录:

视频
图像
像素
分辨率
RGB
屏幕
图像与屏幕的关系
RGB色彩问题
分辨率与宽高比
帧率
码流
YUV,以及各个分量
YUV与RGB的关系
YUV常见格式
YUV 的存储格式
ffmpeg 关于 YUV的几条命令


视频
在这里插入图片描述

图像
图像由像素组成,如下图中的一个一个的小格子
在这里插入图片描述

像素
像素由 RGB组成的,RGB(红绿蓝三个颜色)
在这里插入图片描述

分辨率
分辨率:横向的像素个数 * 纵向的像素个数

RGB

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

屏幕
由无数的发二极管组成的屏幕,每三个发光二极管(红 绿 蓝)组成一个像素,根据我们的图像数据,颜色信息,去控制屏幕上这些发光二极管,从而形成不同的颜色,最终形成我们真正看到的颜色。

在这里插入图片描述

扫描二维码关注公众号,回复: 13361934 查看本文章

图像与屏幕的关系

在这里插入图片描述

RGB色彩问题
有些时候 图像并不是RGB格式,而是BGR格式。所以有些图像展示的时候 颜色不对,就是因为他本身的数据格式是BGR,也是三原色,但是三原色的排列顺序 与 RGB格式是不同的,所以最终送给显示器去显示的时候,送的是BGR数据,而显示器的驱动并不知道数据的格式,他都是以RGB的数据格式来处理 并在屏幕上渲染,所以呈现出来的色彩效果当然不对。

所以对于这种BGR数据 要做格式转换,转换成RGB数据,再送给驱动处理。

BMP格式的图像文件 使用的是 BGR格式,所以显示BMP格式图像的时候,需要先做一个格式转换,将BGR格式的数据抓换位 RGB格式 再送给驱动处理。

在这里插入图片描述
PPI : 每英寸的像素数,和分辨率很类似,但是这个指标表述的是一个屏幕的质量,如这个屏幕一寸长的距离内一共放了几个像素点。

DPI : 每英寸的点数,和PPI类似

当一英寸距离内放置像素数超过300,就属于视网膜级别,即我们人眼已经区分不出来 它里面是由像素组成的。


分辨率与宽高比

视频的格式常见的宽高比 16/9 4/3(以前的老电视 显示器)。对于视频的宽高比不是 16/9 或者 4/3的视频,那他属于非标准的视频分辨率,对于这类分辨率,我们要做转换,将其宽高比 转换成 16/9或者4/3
在这里插入图片描述

帧率

在这里插入图片描述

码流
在这里插入图片描述

YUV 以及各个分量

与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽

为什么要使用YUV: YUV 存储的数据要比 RGB少很多

在这里插入图片描述
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色

在这里插入图片描述
Y分量:明亮度

在这里插入图片描述
U分量 即Cb分量 :色彩 蓝色 分量

在这里插入图片描述
V分量 即Cr分量 : 色彩 红色分量

在这里插入图片描述

YUV与RGB的关系

在这里插入图片描述
在这里插入图片描述

YUV常见格式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

YUV 的存储格式

在这里插入图片描述
在这里插入图片描述
RGB 的码流,如果换算成以位为单位的码流 就要乘8,因为在网络传输的时候是以位为单位的,如 1M的带宽,实际是指1M 的比特位,而不是1M的字节数。

YUV的码流 换算与 RGB类似

在这里插入图片描述
ffmpeg 关于 YUV的几条命令

1 先使用ffmpeg 从多媒体文件中获取到 YUV数据

ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

ffmpeg -i input.mp4
-an  //:audiono  表示没有音频,过滤音频
-c:v   rawvideo  // codec:video  表示视频编解码,rawvideo  表示对多媒体文件中视频 使用rawvideo做处理,获取YUV数据
-pix_fmt yuv420p out.yuv // 指定输出的YUV数据格式为 yuv420p 

2 播放 YUV

ffplay -pix_fmt yuv420p -s 608x368 out.yuv

ffplay 
-pix_fmt yuv420p  //指定播放的格式
-s 608x368 //指定播放分辨率 
out.yuv

3 播放 Y 分量

ffplay -pix_fmt yuv420p -s 608x368 -vf extractplanes=‘y’ out.yuv

ffplay  -pix_fmt yuv420p -s 608x368 
-vf extractplanes='y'  // -vf 表明滤波 从YUV数据中 单独播放Y分量
out.yuv

4 提取 各个分量

ffplay -i file.mp4 -filter_comples ‘extractplanes=y+u+v[y][u][v]’ -map ‘[y]’ y.yuv -map ‘[u]’ u.yuv -map ‘[v]’ v.yuv

ffplay  -i file.mp4 
 -filter_comples //复杂滤波
'extractplanes=y+u+v[y][u][v]'  //从YUV数据中 单独播放 Y分量  U分量  V分量   综括号中的代表前面的别名
-map '[y]' y.yuv  // -map y用于有多个输出是使用,引用 别名,生成需要的文件
-map '[u]' u.yuv
 -map '[v]' v.yuv

5 播放 Y分量,注意播放格式
ffplay -pix_fmt gray -s 608x368 y.yuv

ffplay 
-pix_fmt gray //播放格式是 单色  并不是完整的YUV数据
-s 608x368 y.yuv

6 播放 U分量,注意 播放格式 ,分辨率
ffplay -pix_fmt gray -s 304x184 y.yuv

ffplay 
-pix_fmt gray //播放格式是 单色  并不是完整的YUV数据
-s 304x184 y.yuv //分辨率应该是 原YUV整体数据分辨率的一半:304x184

播放V分量 与 U分量类似

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/121502481
今日推荐