版本比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
图像与像素
图像由像素组成,像素有不同的格式和大小,以常见的RGB888为例,该格式表示每个像素由R,G,B三个分量构成,每个分量的位深是8bit,这样一个像素就占用24bit空间,除此之外还有RGB565(16bit),RGBA(32bit)等格式。
颜色空间
表示对色彩的组织方式,决定如何对颜色进行编码。在给定颜色空间内,任何一种颜色都可以转换成一个对应的数字编码。
参考链接:颜色空间 - 可可西 - 博客园
RGB
基于人眼感光的生理特性(视杆细胞和三种视锥细胞),将颜色分成红(Red)、绿(Green)、蓝(Blue)三个分量来表示,通过三个分量叠加形成不同的颜色。
RGBA
在RGB基础上增加Alpha通道,表示不透明度参数,Alpha为0时,表示完全透明,Alpha越大越不透明。RGBA适用于图像叠加场景,由于透明度的存在,使得图像叠加之后不会完全覆盖,有利于数码合成和渲染。
CMYK
印刷四分色模式,用于印刷行业。光线叠加的原理是越叠越亮,然而打印机打印是油墨,颜料的叠加是颜色越多越黑 。RGB对应加色模式,CMYK对应减色模式。
C:Cyan = 青色
M:Magenta = 洋红色,又称为“品红色”
Y:Yellow = 黄色
K:blacK = 黑色
YUV
因黑白电视到彩色电视过渡而发明,原理是人眼对亮度更敏感,而对颜色相对不敏感,实现方式是将颜色分成亮度信号与色度信号,其中Y代表亮度(Luminance),UV代表色度(Chrominance)。YUV常用于图像采集与编码。
HSL与HSV/HSB
HSL(H是色相 -- Hue,S是饱和度 -- Saturation,L是亮度 -- Lightness) 注:windows的画图软件使用的是该模型。
HSV(H是色相 -- Hue,S是饱和度 -- Saturation,V是明度 -- Value),又称HSB(B -- Brightness) 注:Adobe Photoshop使用的是该模型。
H是色相 ,色彩的外相,代表人眼能感知的色彩的范围,可以理解为纯色的范围。色相一般用色相环表示,如下(黑色、白色、灰色没有色相):
S是饱和度,表示是相同色相、亮度下色彩的纯度变化,数值越大,颜色中的灰色就越小,颜色越纯,数值越小,颜色越灰,直致完全变成灰色。
L(亮度)、V(明度)是亮度,表示色彩的明暗,数值越小,色彩越暗,数值越大,色彩越亮。在HSL中,亮度100%时是纯白色,在HSV中,亮度100%代表纯色。
YUV图像格式
参考链接:
- 总结各种RGB转YUV的转换公式 - 郑建宏 - 博客园
- RGB与YUV相互转换 · FFmpeg原理
- YUV与RGB格式转换 | ibabyblue's Blog
- 一文读懂 YUV 的采样与格式
- YUV格式详解【全】_编码笔记的博客-CSDN博客_yuv格式
- Recommended 8-Bit YUV Formats for Video Rendering - Win32 apps | Microsoft Learn
YUV格式介绍
UI Text Box | ||
---|---|---|
| ||
首先说一说YUV颜色模型,单单就YUV颜色模型来说,就有很多种叫法,而且总是让人颇感困惑。一般来讲,我们把YUV、Y`UV、YCbCr、YPbPr包含在YUV颜色模型的范围内,其中Y都表示亮度,UV表示两个色度分量,但是具体的颜色模型的用途又各不相同,当然,他们与RGB的互转公式也就不尽相同。那就先说说这些不同叫法的YUV的用途和由来。在电视系统发展的早期,YUV和Y`UV都是颜色信息的模拟信号编码形式,虽然Y和Y`都表示亮度,但是两种亮度的意义却天差地别,Y用来代指luminance,表示的是自然颜色的亮度,而Y`代指luma,表示的是经过伽马压缩之后电信号的强度。在现在的计算机系统中,YUV一般用来代指YCbCr,用来表示文件的编码格式,用于数字视频的编码,而YPbPr颜色模型常常用在模拟分量视频中。所以YUV颜色模型到RGB颜色模型的转换,应该对应两种方式,分别是模拟YUV->模拟RGB、数字YUV->数字RGB。不过因为标清、高清、以及超清幅面,YUV转RGB的权重值各不相同,需要将模拟信号和数字信号再做一次幅面划分,就出现了2*3 = 6,6中转换公式。 |
UI Text Box | ||
---|---|---|
| ||
Gamma校正,指CRT显示器中电子束生成的图像亮度与输入电压并不成正比,为了达到线性亮度,就必须对输入电压进行校正。 |
提示 |
---|
|
RGB与YUV转换
BT.601标准下的RGB与YUV转换,来自:https://learn.microsoft.com/en-us/windows/win32/medfound/recommended-8-bit-yuv-formats-for-video-rendering#converting-rgb888-to-yuv-444
代码块 | ||
---|---|---|
| ||
Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16 U = ( ( -38 * R - 74 * G + 112 * B + 128) >> 8) + 128 V = ( ( 112 * R - 94 * G - 18 * B + 128) >> 8) + 128 |
代码块 | ||
---|---|---|
| ||
C = Y - 16 D = U - 128 E = V - 128 R = clip( round( 1.164383 * C + 1.596027 * E ) ) G = clip( round( 1.164383 * C - (0.391762 * D) - (0.812968 * E) ) ) B = clip( round( 1.164383 * C + 2.017232 * D ) ) // 简化后近似如下 R = clip(( 298 * C + 409 * E + 128) >> 8) G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8) B = clip(( 298 * C + 516 * D + 128) >> 8) |
YUV采样格式
YUV有不同的采样格式,因为人眼对亮度敏度而对色度相对不敏度,所以可以适当减少对UV分量的采样,达到节省带宽的效果。
YUV444采样
这是YUV的无损采样,对每个像素点都采集一次Y分量和UV分量,按采样深度是8bit计算,采样之后一个像素占用24bit。
YUV422采样
每两个Y分量采集一次UV分量,这两个Y分量共用一组UV信号,一个像素点采样之后平均只占用16bit。
YUV420采样
每四个Y分量采集一次UV分量,实际操作时是每一行扫描只采集U或V分量的一种,相邻的两行两列4个像素点共用一组UV分量,一个像素点平均只占用12bit。
YUV411采样
较少使用,与YUV420类似,每四个Y分量共用一组UV分量,区别是YUV411是水平方向的4个Y共用一对UV。
提示 |
---|
一张宽高为
相比于YUV444采样,YUV420采样减少了一半数据大小。 |
YUV存储格式
包括以下三种存储格式:
- 平面格式(Planar)
- 先连续存储所有的Y分量,然后存储U分量,最后是V分量。
- 打包格式(Packed)
- YUV分量连接交替存储。
- 半平面格式(Semi-Planar)
- Y分量连续存储,UV分量交替存储。
每种采样方式下都可以有这三种存储格式,导致组合之后YUV有众多的存储格式。
两款常用的YUV播放器的格式参数:
Image Added
Image Added
目录 |
---|