Tango 图片格式 YCRCB_420_SP
Tango image format YCRCB_420_SP
我已经有一段时间没有为 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
图像的正确方法是什么?应用OpenCV是否正确cv::COLOR_YUV2RGB_NV12
?
编辑:
我尝试按照@fireant 的建议使用 NV21,但这个显然不起作用:
NV12 更接近原始颜色。代码是:
cv::cvtColor(image, imageBgr, cv::COLOR_YUV2RGB_NV21);
图片格式应为YUV NV21 not NV12. OpenCV can convert an image from that format to BGR or RGB。
只是猜测,您似乎使用的是 RGB 而不是 BGR,使用 BGR 的 NV21 之后的图像如下所示:
我已经有一段时间没有为 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
图像的正确方法是什么?应用OpenCV是否正确cv::COLOR_YUV2RGB_NV12
?
编辑:
我尝试按照@fireant 的建议使用 NV21,但这个显然不起作用:
NV12 更接近原始颜色。代码是:
cv::cvtColor(image, imageBgr, cv::COLOR_YUV2RGB_NV21);
图片格式应为YUV NV21 not NV12. OpenCV can convert an image from that format to BGR or RGB。
只是猜测,您似乎使用的是 RGB 而不是 BGR,使用 BGR 的 NV21 之后的图像如下所示: