C 从rgb到yuv 4:2:0的转换

C 从rgb到yuv 4:2:0的转换,c,C,如何使160*70位图图像在640*280位图图像上移动,并在将两个位图图像转换为yuv 4:4:4并将其写入单个yuv文件后从其边缘反射?如何将其转换为yuv 4:2:0?请您帮助我如何用c编写代码?转换为yuv 4:4:4-这是对每个RGB向量的纯仿射变换。只要使用适当的公式,为任何YUV变种你需要。此时,您可能也想将图像分割为多个平面 转换为YUV 4:2:0-这纯粹是一个重采样问题。您需要将U和V平面重采样为半宽半高。不要跳过采样(“最近邻采样”);这将导致非常难看的别名。您可以简单地平

如何使160*70位图图像在640*280位图图像上移动,并在将两个位图图像转换为yuv 4:4:4并将其写入单个yuv文件后从其边缘反射?如何将其转换为yuv 4:2:0?请您帮助我如何用c编写代码?

转换为yuv 4:4:4-这是对每个RGB向量的纯仿射变换。只要使用适当的公式,为任何YUV变种你需要。此时,您可能也想将图像分割为多个平面

转换为YUV 4:2:0-这纯粹是一个重采样问题。您需要将U和V平面重采样为半宽半高。不要跳过采样(“最近邻采样”);这将导致非常难看的别名。您可以简单地平均相应的2x2平方或使用更高级的过滤器。对于下采样,面积平均值非常接近理想值;高斯分布可能会给出稍好的结果

如果您不介意使用库代码,ffmpeg中的libswscale可以为您完成这两个步骤,而且速度非常快

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

这有RGB->YUV440

和RGB->YUV420在中的同一篇文章中进行了描述

我不明白:

如何制作160*70位图图像 移动到640*280位图图像上,然后 从边缘反射


你试过什么?你在哪里遇到问题?如果你真的想知道所有这些事情,你应该试着把你的问题分解成几个部分,试着解决每一部分,并在遇到问题时提出一个具体的问题。一个复杂性是YUV420通常是帧压缩的,Y图像首先是U和V半分辨率图像。RGB图像格式通常是像素压缩的