首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >YUV_420_888 (字节)格式

YUV_420_888 (字节)格式
EN

Stack Overflow用户
提问于 2018-07-18 10:39:21
回答 1查看 3K关注 0票数 4

我用YUV_420_888格式(YCbCr)在安卓系统上拍摄了一张图片。

图像维数是4032 X 3024,我从ImageReader得到三架飞机。

有12192768字节的y 具有6096383字节的U V有6096383字节

我的理解是,对于Y中的每个像素,在2:1的U/V平面上有一个对应的值(2像素Y对应于1像素U/V)。

但是做12192768/2的数学运算,U/V平面中缺少一个字节。

为什么少了一个字节?YU/V的关系如何

EN

回答 1

Stack Overflow用户

发布于 2020-05-29 16:41:37

好吧,让我们再试一次。最初,我问是否有人找到了答案,因为我也在寻找解决这个问题的办法。最后,尽管我已经找到了这个问题的答案:

答案在于图像采集格式。Android直到默认为NV21格式,这意味着在Y平面之后有一个V字节和一个U字节交织的平面。NV12是在V字节之前有U字节的备用(参见:How to render Android's YUV-NV21 camera image on the background in libgdx with OpenGLES 2.0 in real-time?)

然后,ImageReader返回的Image创建一个直接访问该内存位置的ByteBuffer。在isDirect上调用ByteBuffer ()验证了这一点。您还可以通过修改vBuffer (getPlane()2)索引1来看到这一点。由于vBuffer的索引1指向uBuffer索引0的相同内存位置,所以uBuffer.get(0)将是相同的。

因此,UV平面( NV21的VU平面)等于Y-plane/2=length (如上面示例中注意到的6096384 )。如果你从第一个V(VU-平面)开始,计数到最后一个V ( VU-planelength -1),它会少一个,因为这个平面上的最后一个字节是U,同样,第一个U字节在VU平面的索引1处,直到VU平面。

这里有一幅图像,希望能从视觉上解释上面的措辞:

这都是基于这样一个事实:图像是以NV21格式捕获的,而不是NV12或Y12。这是另一个很好的参考视觉(https://www.twblogs.net/a/5d7ede57bd9eee541c3480f3)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51399908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档