平面YUV420数据布局

y43*_*34y 8 c++ image-processing yuv codec h.264

在我的项目中,我使用OpenH264编解码器,据说以YUV 4:2:0 planar格式输出数据.解码后,我得到一个带有width * height * 1.5元素的数组,在显示时,看起来像这个图像:

http://o3d.googlecode.com/svn/trunk/samples_webgl/assets/shaving_cream.png

为什么主要的一个下面有四个区域(包含Y-负责灰度 - 元素),而不是两个,就像我的第二张图片一样?这是否意味着格式不同或我错了,我的世界崩溃了?

我认为resoult应该是这样的:

在此输入图像描述

thi*_*olr 11

接受的答案是完全正确的,我只是添加有关转换为YUV值的更多信息:

YUV420平面

size.total = size.width * size.height;
y = yuv[position.y * size.width + position.x];
u = yuv[(position.y / 2) * (size.width / 2) + (position.x / 2) + size.total];
v = yuv[(position.y / 2) * (size.width / 2) + (position.x / 2) + size.total + (size.total / 4)];
Run Code Online (Sandbox Code Playgroud)

参考:https://en.wikipedia.org/wiki/YUV

  • 我有点害羞编辑一个555k信誉用户的答案,哈哈! (2认同)

Han*_*ant 9

这正是你的假设.您只是忽略了在图像宽度上有一半的U和V像素.因此,U数据的偶数行在左侧,而奇数在右侧.其次是V数据.

为了按照您想要的方式对其进行排列,解码器必须交错U和V数据.它没有这样做.只是在转换为RGB之前不要开始查看图像:)


Mut*_*Bob 5

噻格尔的图表非常准确。一个看起来更像您的准确图表将是

YUV布局

汉斯·帕桑(Hans Passant)解释说,您看起来像有4张图片的原因。