首页 文章

如何使用Point Cloud Library(PCL)从基本ToF相机模块传输深度图像

提问于
浏览
2

Inforamtion:

  • 我有一个简单的ToF(飞行时间)相机模块,由一个只包含深度节点的供应商提供 .

  • 我已经设置了PCL环境,可以编译并执行它提供的示例代码 .

  • ToF相机模块附带一个源代码,显示如何从硬设备获取深度原始数据(x,y,z值),但不会告诉如何将其作为点 Cloud 图像和深度图像进行流式传输 .

  • Win 7 64bit,Visual Studio 2008,PCL all-in-one 32bit .

因此,我计划使用PCL显示点 Cloud 图像和深度图像,我可以从该相机模块获得x,y,z数据,如果可以进行流式传输则更多 .

但是,据我所知,PCL倾向于将所有点 Cloud 数据存储为.pcd文件,然后读取它,从而输出点 Cloud 图像和深度图像 .

如果每次在每帧中都必须保存PV()和readPCD(),那么以这种方式进行流式传输显然太慢了 . 所以我研究了“openni grabber”和“openni range image visualization”示例代码并尝试执行它们,遗憾的是“没有设备连接” . 就是我得到的一切 .

在尝试之前,我有一些想法可以提出建议:

  • 有没有办法在除Kinect,Xtion和PrimeSense之外的设备上使用Openni?即使它只是一个没有名称且只有深度节点的设备?

  • PCL可以在不访问.pcd文件的情况下显示点 Cloud 图像和深度图像吗?换句话说,我可以只分配每个顶点的值并构建一个图像吗?

  • 我可以将所有顶点标准化并构建几乎没有Opencv的图像吗?

  • 在点 Cloud 图像和深度图像中有没有其他方法来流式传输ToF相机模块?

1 回答

  • 1

    1)更改OpenNI抓取器以使用您自己的ToF相机将比在下面显示的循环中使用相机中的示例要多得多 .

    2)是的,PCL可以在不访问.pcd文件的情况下显示点 Cloud 图像和深度 . .pcd加载器的作用是解析pcd文件并将值放在 Cloud 格式中 . 您可以直接从相机数据执行此操作,如下所示 .

    3)不知道你在这里的意思 . 我建议您尝试使用下面提出的pcl可视化器或 Cloud 查看器 .

    你可以这样做:

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
    cloud->isDense = true;
    cloud->width = widthOfTOFsensor;
    cloud->height = heightOfTOFsensor;
    cloud->size = cloud->width * cloud->height;
    
    //Create some loop
    
        //grabNewFrame from TOFsensor
    
        for(int pointIndex=0;pointIndex<cloud->size();pointIndex++)
        {
            cloud->points[pointIndex].x = tofSensorData[pointIndex].x; //Don't know the tofData format, so I just guessed something.
            cloud->points[pointIndex].y = tofSensorData[pointIndex].y;
            cloud->points[pointIndex].z = tofSensorData[pointIndex].z;
        }
    
        // Plot the data using pcl visualizer or cloud viewer, see:
    

    http://pointclouds.org/documentation/tutorials/cloud_viewer.php#cloud-viewer

    http://pointclouds.org/documentation/tutorials/pcl_visualizer.php#pcl-visualizer

相关问题