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的最有效方式