1.官方示例代码
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
int
main (int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ> ("test_pcd.pcd", *cloud) == -1) //* load the file
{
PCL_ERROR ("Couldn't read file test_pcd.pcd \n");
return (-1);
}
std::cout << "Loaded "
<< cloud->width * cloud->height
<< " data points from test_pcd.pcd with the following fields: "
<< std::endl;
for (std::size_t i = 0; i < cloud->points.size (); ++i)
std::cout << " " << cloud->points[i].x
<< " " << cloud->points[i].y
<< " " << cloud->points[i].z << std::endl;
return (0);
}
2.代码解读
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/point_types.h>
包含PCL点云中的点格式 pcl::PointXYZ ,这种格式只包含x,y,z三个坐标,类型为float。
#include <pcl/io/pcd_io.h>
包含 pcl::io::loadPCDFile<pcl::PointXYZ> (“test_pcd.pcd”, *cloud) 读取文件函数。
- 第一个参数是读取文件的路径;
- 第二个参数是将读取的点云数据放入的点云对象;
- 返回一个int类型值,读取成功返回0,失败返回-1;
点云创建和数据访问
创建点云指针对象
pcl::PointCloud<pcl::PointXYZ>::Ptr
cloud (new pcl::PointCloud<pcl::PointXYZ>);
- 创建的是个boost::shared_ptr类型的指针对象,可以当成普通指针使用,构造函数需要传递一个同类型的普通指针;
创建点云对象
当然你也可以创建一个普通的点云对象,但是需要设置大小
- 先创建一个点云对象,再去设置大小:
pcl::PointCloud<pcl::PointXYZ> cloud;//调用默认构造函数
cloud.height = 1;//设置点云高度,一般设置为1
cloud.width = 100;//设置点云宽度,一般为点云数量
cloud.resize(cloud.height * cloud.width);//最后设置点云大小
值得注意的是点云对象的创建需要先设置height和width,再去resize,不能直接resize。
点云的数据访问
点云对象比较重要的几个公共数据。
points
访问第i个点的xyz坐标(如果点云包含RGB数据,访问方式类似)
cloud->points[i].x;//cloud.points[i].x;
cloud->points[i].y;//cloud.points[i].y;
cloud->points[i].z;//cloud.points[i].z;
height和width
cloud->height;
cloud->width;
is_dense
cloud->is_dense;
这是个布尔值,true表示所有值可用,false表示有无效值。
其他点云成员函数
begin()和end()
返回点云迭代器。
size()
返回点云大小。