如何将NV21 YUV转换为RGB并返回

时间:2016-02-21 09:29:38

标签: android c++ image colors

我正在开发一款应用于Android上的NV21 YUV格式的应用程序。只是为了检查我的算法是什么,我需要将YUV格式保存为RGB,然后再保存到位图文件以查看它。所以我为此编写的算法非常简单。 程序加载bitmab RGB图像将其转换为NV21,然后将其转换为RGB并保存到磁盘。 我实施了Wikipedia YUV subject中给出的转化。我正在使用 BT.601 的全摆动用于RGB到YUV转换,并且 Y' UV420sp(NV21)到RGB转换(Android)用于RGB到YUV。然而,图像失去了它的颜色。我检查了我的代码(这是非常简单的未经优化和简单)多次,我没有发现任何错误。我正在使用的转换有什么问题吗?

输入图片:

enter image description here

输出图片:

enter image description here

1 个答案:

答案 0 :(得分:1)

对你的代码一无所知,几乎不可能说清楚。

但是,图像损坏的方式表示:

  1. 正确处理了Luma(Y)平面。
  2. 色度(V / U交错,4:2:0子采样)平面处理不正确,而且,所有色度行都相同,这通常发生在处理后续行时忘记进一步移动偏移时。 YUV颜色模型中绿色色调的普遍性通常表明您正在为色度平面读取零(可能实际上是垃圾区域)。
  3. 我建议你在从RGB转换到RGB时仔细检查U / V指针的正确处理。 Rememer,NV21是混合平面的,4:2:0次采样,而泛型RGB(特别是如果你用它来进行位图导入/导出)可以是平面的或交错的,但不能进行二次采样。

    此外,如果提供一些显示如何处理事情的代码,通常会更容易获得全面的建议。