从rgb转换为yuv 4:2:0

时间:2010-07-08 11:55:21

标签: c

如何将160 * 70位图图像移动到640 * 280位图图像上,并在将两个位图图像转换为yuv 4:4:4并将其写入单个yuv文件后反射出边缘?以及如何将其转换为yuv 4:2:0?请问我如何在c中编码相同的代码?

2 个答案:

答案 0 :(得分:3)

转换为YUV 4:4:4 - 这纯粹是每个RGB矢量上的仿射变换。只需使用适当的公式即可获得所需的YUV变体。你可能也想在这时将图像分成平面。

转换为YUV 4:2:0 - 这纯粹是一个重采样问题。您需要将U和V平面重新采样为半宽半高。 NOT 只是跳过样本(“最近邻居采样”);这将导致非常难看的锯齿。您可以简单地平均相应的2x2正方形或使用更高级的滤镜。对于下采样,无论如何,面积平均值非常接近理想值;高斯可能会给出更好的结果。

如果您不介意使用库代码,来自ffmpeg的libswscale可以为您执行这两个步骤,并且可以非常快速地完成。

最后,将小图像移动到大图像上:它是纯粹的矩形图像还是使用alpha通道?无论哪种方式,您只需要遍历您希望它出现的坐标,并为每个点输出图像。如果是矩形,则只需复制像素,而如果它有alpha通道,则需要使用它进行Alpha混合(根据alpha值在像素值之间进行插值)。

答案 1 :(得分:1)

wikipedia article有RGB - > YUV440。

alt text

和RGB - > YUV420在this section中的同一篇文章中有描述。

我不明白:

  

如何制作160 * 70位图图像   移动640 * 280位图图像和   反思它的优势