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值的更多信息:

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
这正是你的假设.您只是忽略了在图像宽度上有一半的U和V像素.因此,U数据的偶数行在左侧,而奇数在右侧.其次是V数据.
为了按照您想要的方式对其进行排列,解码器必须交错U和V数据.它没有这样做.只是在转换为RGB之前不要开始查看图像:)