将 PXCImage 转换为 OpenCV Mat (PIXEL_FORMAT_YUY2)

Posted

技术标签:

【中文标题】将 PXCImage 转换为 OpenCV Mat (PIXEL_FORMAT_YUY2)【英文标题】:Convert a PXCImage into an OpenCV Mat (PIXEL_FORMAT_YUY2) 【发布时间】:2017-02-20 15:17:04 【问题描述】:

我正在开发英特尔的 RealSense SDK,我必须将其转换为 OpenCV 格式。

我在论坛 (Convert a PXCImage into an OpenCV Mat) 中看到了这个解决方案,但是对于“PIXEL_FORMAT_YUY2”类型,该代码不起作用。

有人知道怎么改吗?

提前致谢

【问题讨论】:

【参考方案1】:

我不知道英特尔实感 SDK,因为我只使用了 librealsense API。

英特尔实感 SDK 的文档应为 here。

我不知道它如何与 SDK 配合使用,但使用 librealsense,您可以直接选择适当的颜色格式(对于 OpenCV mat,它应该是 bgr8)。

如果您的 SDK 没有此选项,您可以查看 here 如何将 librealsense 解包 yuy2 格式。

或者您可以尝试将数据直接复制到mat(您必须弄清楚cvDataType 的好值和cvDataWidth 的好值),然后将cvtColor() 与适当的conversion 如果您希望能够以 RGB 三元组的形式访问像素值?

希望对你有帮助。

【讨论】:

非常感谢!也许这是一个愚蠢的问题,但我不知道如何安装 librealsense ......我看到了一些适用于 Ubuntu 的命令,但我没有看到任何关于 windows 的分步教程。你可以帮帮我吗?提前致谢! librealsense 是 Windows 以外平台的替代方案。对于 Windows,我认为 Intel 建议使用 SDK。您仍然可以使用 CMake 和 Visual Studio 从源代码 librealsense 构建。您应该检查您使用 SDK 获得的默认颜色格式,也许它与 yuy2 不同的格式,您应该能够轻松转换为 mat bgr 在Intel SDK中de格式是PIXEL_FORMAT_YUY2,但是不知道怎么做这个转换。我这样做了:colorIm->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_YUY2, &frmData);image_openCV = Mat(Size(640, 480), CV_8UC3, frmData.planes[0]); 但效果不好,图片排序不正确。 Here 你有一个例子和here 图像格式列表。使用PIXEL_FORMAT_RGB24,您应该能够获得mat 图像。您需要将红色通道与蓝色通道交换,因为 mat 图像采用 BGR 格式(请参阅 OpenCV 中的 cvtColor)。 非常感谢!它适用于 RGB 图像!现在我正在尝试做同样的事情,但使用深度图像。我想我已经证明了所有可能的格式组合,但我无法复制它。你知道怎么做吗?

以上是关于将 PXCImage 转换为 OpenCV Mat (PIXEL_FORMAT_YUY2)的主要内容,如果未能解决你的问题,请参考以下文章

opencv:将 Mat 转换为 IplImage 问题

opencv:将iplimage转换为mat后出错

是否可以将 UTexture2D 转换为 OpenCV::Mat

如何将 Opencv Mat 转换为 JPEG 字符数据

将 OpenCV Mat 转换为数组(可能是 NSArray)

android:如何将 int[] 转换为 OpenCV Mat c++?