YUV420P 和 YUVJ420 有什么区别?
如果你不熟悉 YUV 数据格式的话,建议优先阅读如下文章:
定义
下面是两者在ffmpeg中的定义:
AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range
区别
两者的不同在于,颜色空间不同。
/**
* MPEG vs JPEG YUV range.
*/
enum AVColorRange {
AVCOL_RANGE_UNSPECIFIED = 0,
AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges
AVCOL_RANGE_NB, ///< Not part of ABI
};
YUVJ420P的字面含义是使用了JPEG颜色范围的YUV420P,像素使用表示颜色的数值范围发生了变化。
YUV420p的像素颜色范围是[16,235],16表示黑色,235表示白色。
YUVJ420P的像素颜色范围是[0,255],0表示黑色,255表示白色。
从这里来看,貌似是YUVJ420P表示的更准确一下。
YUVJ420P的字面含义是“使用了JPEG颜色范围的YUV420P,像素使用表示颜色的数值范围发生了变化。YUV420p的像素颜色范围是[16,235],16表示黑色,235表示白色 YUVJ420P的像素颜色范围是[0,255]。0表示黑色,255表示白色
从这里来看,貌似是YUVJ420P表示的更准确一下。
区别的缘由
YUV420p对应的是电视。
YUVJ420P对应的是显示器。
灰阶
何谓灰阶?通常来说,液晶屏幕上人们肉眼所见的一个点,即一个像素,它是由红、绿、蓝(RGB)三个子像素组成的。
每一个子像素,其背后的光源都可以显现出不同的亮度级别。而灰阶代表了由最暗到最亮之间不同亮度的层次级别。这中间层级越多,所能够呈现的画面效果也就越细腻。以8bit面板为例,能表现2的8次方,等于256个亮度层次,我们就称之为256灰阶。
LCD屏幕上每个像素,均由不同亮度层次的红、绿、蓝组合起来,最终形成不同的色彩点。也就是说,屏幕上每一个点的色彩变化,其实都是由构成这个点的三个RGB子像素的灰阶变化所带来的。
电脑如果想显示准确的色彩,那么必须要0-255灰阶全部齐全。灰阶的损失,就意味着色彩的损失。
对于PC主机,灰阶的输出是0-255。灰阶输出为0的情况下,显示全黑画面;灰阶为255的情况下,显示全白画面。
液晶显示器为了适应PC主机,所可接受的灰阶信号范围同样是0-255。
256个灰阶输出图,如果PC接电视,必然会有13%的灰阶损失 而液晶电视是不同的,它的灰阶范围是16-235,当接收到信号16时,液晶电视将其还原成白色;当接收到信号235时,显示全白画面。
电视的输入设备,比如说有线电视信号、DVD影碟机等输出的也是16-235的灰阶信号。液晶电视如果接收到了低于16的信号,会被认为是干挠,将不被显示;如果接收到了高于235的信号,大部分液晶电视只能做削波处理,即仍当做235信号来处理。简单点说,就是0-15全部显示纯黑,236-255全部显示纯白,中间的过渡全部损失。
总结
YUV420P 和 YUVJ420P 没啥太大的区别。
如果偏色不严重,你也可以对客户解释说是显示器的色差,而不是你的程序的问题。
来源:https://blog.csdn.net/lanxiaziyi/article/details/74347911
技术交流,欢迎加我微信:ezglumes ,拉你入技术交流群。
私信领取相关资料
推荐阅读:
觉得不错,点个在看呗~