使用Kinect和EMGU检索点云

本文关键字:检索 EMGU Kinect 使用 | 更新日期: 2023-09-27 18:13:36

我已经看到了使用EMGUCV处理从Kinect捕获的常规RGB图像的例子,但是你也可以有一个网络摄像头。我有兴趣得到一个点云,我可以稍后使用三角测量。

我已经尝试"手动"转换深度帧到点云文件。在深度帧中,你有X, Y和深度值,我将其转换为.ply文件的XYZ点。结果是乱码和无用的。

现在,我注意到EMGUCV有这个方法将点云映射到EMGUCV Mat对象。我只是不知道这个的语法应该是怎样的,因为没有人要求这样做的例子,也没有EMGUCV背后的人提供的任何例子。

我试了一下,Kinect似乎都没有打开,成功总是返回false。

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

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

使用Kinect和EMGU检索点云

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

如果你像我一样,你只对得到一个点云感兴趣,你可以把它变成一个网格,你不感兴趣做所有的花哨的数学自己。幸运的是,只要你写500行代码,Fusion就能帮你做到这一点。微软的例子有很多故障检查、事件、布尔值设置、以不同方式渲染图像、组合多个点云等等。大量不必要的(对我来说)代码。他们的例子是3800行代码。我已经试着把它剪短了,你也许可以把它剪得更短。

我在粘贴时遇到了一些麻烦,因为它很长但是链接在这里

试着摆弄这些数值,看看微软的Kinect Fusion Sample项目,它完全是"偷来的"(99%)。这将打开你的传感器,取一个深度+颜色的图像,并把它变成一个网格。如何保存它取决于你自己。我制作了一个小的.ply-outputter类,他们也在他们的示例中提供了这个类。