2

Inforamtion基本TOF相机模块流的深度图像:如何从点云中图书馆(PCL)

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

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

  3. ToF相机模块附带的源代码显示了如何从硬件设备获取深度原始数据(x,y,z值),但并未告知如何将其作为点云图像和深度图像。

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

其结果是,我打算使用PCL显示点云图像和深度图像与X,Y,Z的数据我可以从相机模块获得,进一步,如果流是可能的。

不过,据我所知,现在是PCL趋于所有的点云数据存储为.PCD文件,然后读取它从而输出点云图像和深度图像。

这显然是太慢了,做这样的方式流,如果我要savePCD()和readPCD()每次在每一帧。所以我研究了“openni grabber”和“openni range image visualization”示例代码,并尝试执行它们,遗憾的是“没有连接设备”。是我得到的。

我有一些想法,以寻求建议之前,我尝试:

  1. 是否有使用Openni除了Kinect的,Xtion PrimeSense的,并在设备上的方法吗?即使它只是一个没有名字的设备,只有深度节点?

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

  3. 我可以只归所有顶点,并构建一个图像勉强opencv的?

  4. 有没有其他方法可以在点云图像和深度图像中流式传输ToF相机模块?

回答

1

1)更改OpenNI采集卡使用自己的ToF摄像头将比在下面显示的循环中使用摄像头中的示例更有用。

2)是PCL可以在不访问.pcd文件的情况下显示点云图像和深度。 .pcd加载程序所做的是解析pcd文件并将值以云格式进行放置。您可以直接从您的相机数据做到这一点,如下所示。

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

你可以这样做:

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

+0

谢谢你的提醒,我得到了(2)由我自己。 – APU