【发布时间】:2012-10-07 00:11:51
【问题描述】:
有没有办法在 OpenGL 中进行颜色转换(例如来回从 RGB 到 YUV420p)? 我可以使用后台缓冲区的内容、纹理或 FBO。我在这里看到了这个问题,但仅限于 OpenGL 1.1,而且我不受任何特定版本的 OpenGL 的限制。 OpenGL Colorspace Conversion
我想知道是否有更新/更快的方法可以使用较新的版本来执行此操作。我不希望使用任何特定于硬件的东西,但如果需要,我正在使用 Nvidia GPU。
【问题讨论】:
-
您可以使用 glsl 着色器代替 ARB_FRAGMENT 程序。 This answer 给出了转换为 YIQ 的示例。 Y'CbCr 相似,但矩阵略有不同。
-
谢谢!我希望它是一项常见的任务,并有一些库来完成它,但这绝对有效。那肯定会给我RGB-> YUV444。您将如何为 YUV420p 进行下采样色度通道?每四个像素只有一个样本。从您的代码中,我必须在这里做一些不同的事情,我认为 float I = dot (color, kRGBToI); float Q = dot (color, kRGBToQ);
-
我不知道有任何库,但您可能会进行某种重新采样以降低到 4:2:0。 Cb/Cr 通道上的框模糊是我的第一次尝试,但其他重采样滤波器(如 Gaussian 或 Lanczos)可能质量更高。
-
我想我需要去实现它。我认为这应该有效。如果您将所有 cmets 作为答案,我会接受。
标签: opengl 3d nvidia yuv color-space