相关头文件:
#include <pcl/io/io.h>
#include <pcl/point_types.h>
声明和定义点云对象:
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>& cloud = *cloud_ptr;
// 更简洁写法
using MyPoint = pcl::PointXYZ;
using MyCloud = pcl::PointCloud<MyPoint>;
using MyCloudPtr = CLOUD::Ptr;
初始化点云数据PCD文件头:
cloud.width = 30720;
cloud.height = 1;
cloud.is_dense = false;
cloud.points.resize(cloud.width * cloud.height);
pcl::PointXYZRGB color_point;
for (size_t i = 0; i < cloud.points.size(); ++i) {
cloud.points[i].x = color_point.x;
cloud.points[i].y = color_point.y;
cloud.points[i].z = color_point.z;
cloud.points[i].rgb = color_point.rgb;
}
cloud.height用来判断是否为有序点云,=1则是无序点云也可以使用如下函数代替:if (!cloud.isOrganized ()),对于无序点云来说:width就是指点云中点的个数,对于有结构点云来说:width是指点云数据集一行上点的个数,立体相机或者TOF相机获得的点云数据就属于这一类。对于有结构点云的一大好处就是能知道点云中点的相邻关系,最近邻操作效率就非常高,可以大大提高PCL中相应算法的效率。但是结构点云经过某些人为操作后,会变为无结构点云,比如滤波操作等。
例如:有结构点云
cloud.width = 640; // Image-like organized structure, with 640 rows and 480 columns,
cloud.height = 480; // thus 640*480=307200 points total in the dataset
无结构点云
cloud.width = 307200;
cloud.height = 1; // unorganized point cloud dataset with 307200 points
cloud.is_dense (bool) 判断points中的数据是否是有限的(有限为true)或者说是判断点云中的点是否包含 Inf/NaN这种值(包含为false)。
points存储了数据类型为PointT的一个动态数组,例如,对于一个包含了XYZ数据的点云,points是包含了元素为pcl::PointXYZ一个vector。 相当于vector<point3f>
可视化pcd文件:
sudo apt install pcl-tools
pcl_viewer file_name.pcd
pcl_viewer窗口操作的快捷键
p,P: switch to a point-based representation(以点为基准展示)
w,W: switch to a wireframe-based representation (where available)(以线框为基准展示)
s,S: switch to a surface-based representation (where available)(以平面为基准展示)
j,J: take a .PNG snapshot of the current window view(将当前窗口截图为png格式,保存在bin目录下的Debug或者Release目录下)
c,C: display current camera/window parameters(显示当前相机参数)
+/-: increment/decrement overall point size(放大或缩小当前所有点的尺寸)
g,G: display scale grid (on/off)(开启标尺)
u,U: display lookup table (on/off)(开启colorbar)
r,R: [+ ALT]: reset camera [to viewpoint = {0, 0, 0} -> center_{x, y, z}](将相机平移到某个位置)
ALT + s,S: turn stereo mode on/off(打开立体模式)
ALT + f,F: switch between maximized