使用Kinect和EMGU检索点云?

时间:2016-10-18 11:42:16

标签: c# opencv kinect emgucv

我已经看过在从Kinect中捕获的常规RGB图像上使用EMGUCV的示例,例如this,但是您可能还有一个网络摄像头。我有兴趣获得一个Point Cloud,我稍后可以用它来进行三角测量。

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

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

这就是我尝试过的,Kinect似乎甚至没有开启,成功总是会失败。

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

我还遇到了一个问题,即在构建KinectCapture对象期间它一直抛出异常,this是我的解决方案。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

我在这里粘贴它有些麻烦,因为它很长但the link is here

尝试愚弄这些价值观,并看看微软的Kinect Fusion示例项目,它的被盗'完全(99%)从那里。这将打开您的传感器,拍摄深度+彩色图像并将其转换为网格。你如何保存它取决于你。我做了一个小的.ply-outputter类,他们也在他们的例子中提供了它。