使用 Kinect 和 EMGU 检索点云?

Retrieving a Point Cloud using Kinect and EMGU?

我见过在从 Kinect 捕获的常规 RGB 图像上使用 EMGUCV 的示例,例如 this,但是您也可能有一个网络摄像头。我有兴趣获得一个点云,以后可以将其用于三角测量。

我已经尝试 'manually' 将 DepthFrame 转换为点云文件。在深度框架中,您有 X、Y 和深度值,我将其转换为 .ply 文件的 XYZ 点。结果乱码无用

现在,我注意到 EMGUCV 具有 this method,它将点云映射到 EMGUCV Mat 对象中。 我只是不知道这个语法应该如何,因为没有人要求这个的例子或 EMGUCV 背后的人提供的任何例子。

这是我尝试过的方法,Kinect 似乎甚至无法打开,而且总是成功 returns false。

public void test()
{
    KinectCapture kc = new KinectCapture(KinectCapture.DeviceType.Kinect, KinectCapture.ImageGeneratorOutputMode.Vga30Hz);
    Mat m = new Mat();
    bool success = kc.RetrievePointCloudMap(m);
}

我也有一个问题,它在构造 KinectCapture 对象期间一直抛出异常,this 是我的解决方案。

你检查Kinect SDK功能了吗?有很多函数可以让您轻松编写正确的点云 - 只需使用 Kinect SDK。

如果您像我一样,只对获得可以转换为网格的点云感兴趣,您对自己进行所有花哨的数学运算不感兴趣。幸运的是,只要您编写 500 行代码,Fusion 就会为您完成这项工作。 微软的例子有很多失败检查、事件、设置的布尔值、以不同方式呈现的图像、组合多个点云等等。很多不必要的(对我来说)代码。他们的例子是 3800 行代码。 我试过减少它,你可以进一步减少它。

我在粘贴它时遇到了一些问题,因为它很长但是 the link is here

尝试使用这些值,看看 Microsoft 的 Kinect Fusion Sample 项目,'stolen' 完全 (99%) 来自那里。这将打开您的传感器,拍摄深度+彩色图像并将其变成网格。你如何保存它取决于你。我做了一个小的 .ply-outputter class,他们也在他们的示例中提供了它。