Tango 图像格式 YCRCB_420_SP

Posted

技术标签:

【中文标题】Tango 图像格式 YCRCB_420_SP【英文标题】:Tango image format YCRCB_420_SP 【发布时间】:2017-02-02 11:00:34 【问题描述】:

我已经有一段时间没有为 Tango 开发了,但最近我更新到了最新版本的 Tango Java API,我注意到TangoImageBuffer 对象现在有了format == 17,即:

public static final int YCRCB_420_SP = 17;

据我所知,在以前的版本中,它曾经是 YV12 而不是 YCRCB_420_SP

public static final int YV12 = 842094169;

我曾经应用 OpenCV cvtColor 函数将其转换为 BGR:

cv::Mat imageBgr(720, 1080, CV_8UC3);
cv::Mat image(3 * 720 / 2, 1280, CV_8UC1);
cv::cvtColor(image, imageBgr, cv::COLOR_YUV2RGB_NV12);

有没有办法使用 OpenCV 读取 YCRCB_420_SP?我尝试了COLOR_YCrCb2BGR 和类似的模式,但它们不起作用。

显然,COLOR_YUV2RGB_NV12 仍然有效并产生了一些合理的结果:

但感觉就像颜色消失了,一切看起来都很黄。还是我偏执?

我的问题是,阅读YCRCB_420_SP 图像的正确方法是什么?申请OpenCVcv::COLOR_YUV2RGB_NV12是否正确?

编辑:

我尝试按照@fireant 的建议使用 NV21,但这显然不起作用:

NV12 更接近原始颜色。代码是:

cv::cvtColor(image, imageBgr, cv::COLOR_YUV2RGB_NV21);

【问题讨论】:

我遇到了类似的问题...我正在使用 Tango Unity SDK,我们获取相机数据的回调 (TangoUnityImageData) 仍然说它给出了我们的 YV12 框架。我在 Caporales 释放。但是这些框架没有按预期工作......也许它已经像你展示的那样发生了变化,并且在 TangoUnity SDK 中被错误标记......developers.google.com/tango/apis/unity/reference/class/tango/… 【参考方案1】:

图像格式应为YUV NV21 而不是 NV12。 OpenCV 可以从that format to BGR or RGB 转换图像。

只是猜测,您似乎使用的是 RGB 而不是 BGR,NV21 之后的图像与 BGR 如下所示:

【讨论】:

我试过NV21,但它似乎也不起作用。请查看新的修改。 您确定要 RGB 而不是 BGR? COLOR_YUV2BGR_NV21 而不是 COLOR_YUV2RGB_NV21? 嗯,我认为你是对的。 NV21->BGR 看起来比 NV12->RGB 显示为 BGR 更自然。 Tango 相机上的静止颜色与真实颜色相去甚远 :) 感谢您的帮助!

以上是关于Tango 图像格式 YCRCB_420_SP的主要内容,如果未能解决你的问题,请参考以下文章

使用新的 Android camera2 api 从 YUV_420_888 进行 JPEG 编码时的绿色图像

在YUV_420_888中将图像从Android发送到OpenCV Mat中的JNI的最有效方式

如何保存 YUV_420_888 图像?

YUV像素格式

camera2 如何从图像读取器侦听器中的 YUV_420_888 图像中获取 Exif 数据

将 YUV_420_888 转换为 JPEG 并保存文件导致图像失真