【问题标题】:Tango image format YCRCB_420_SPTango 图像格式 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/…

标签: java c++ opencv google-project-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 相机上的静止颜色与真实颜色相去甚远 :) 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 2019-01-07
相关资源
最近更新 更多