色彩空间转换(ARGB - > YUV420)使用OpenGL着色器

时间:2015-04-14 08:34:59

标签: opengl graphics opengl-es-2.0 shader color-space

是否可以使用openGL Frament Shaders将ARGB图像转换为YUV420(平面或半平面)图像?

我正在寻找片段着色器代码或任何参考指南,它将帮助我实现这一目标?

我提到了RGB to YUV using GLSL。 但它没有多少信息。

我需要YUV420图像将其传递给h264编码器。 任何工作或参考着色器代码?

2 个答案:

答案 0 :(得分:0)

您可以阅读here

  

将R,G和B的加权值相加以产生Y',其度量为   整体亮度或亮度。 U和V按比例计算   Y'与B和R值之间的差异。

因此,您可以在着色器中创建一个恒定的3x3矩阵,例如:

enter image description here

如果您使用this标准,该矩阵将有效。因此,对原始纹理进行采样,将其乘以该矩阵,然后将结果烘焙到FBO中。这是一个非常简单的过程。

希望这是足够的信息。如果您需要更多帮助,请随时发表评论。

答案 1 :(得分:0)

除了已经解释过如何进行色彩空间变换的Dimo Markov之外,如果要进行色度子采样,还必须降低色彩平面的分辨率。

要实现这一点,你需要使用三个通道,分别用于Y,U和V.而不是矩阵向量乘法,事情可归结为一个简单的内部(=点)乘积。子采样本身是通过渲染到较小的渲染缓冲区并依赖源纹理mipmap过滤来实现的。