PCLVisualizer可视化类(3)
viewer->addLine<pcl::PointXYZRGB> (cloud->points[0], cloud->points[cloud->size() - 1], "line");
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=165
可视化点云法线和其他特征
显示法线是理解点云的一个重要步骤,点云法线特征是非常重要的基础特征,PCLVisualizer可视化类可用于绘制法线,也可绘制表征点云的其他特征,比如主曲率和几何特征。normalsVis函数中的示例代码演示了如何显示点云的法线,如图1所示。
图1 显示点云法线
下面的这行代码放在绘制点云的代码后面,即可实现对点云法线的显示。
viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal> (cloud, normals, 10, 0.05, "normals");
一旦用户计算得到法线,只需要另外一行程序在视窗中就可以显示这些法线,该显示法线成员方法的参数有法线显示的个数(这里,每十个点显示一个)及每个法线的长度(在这个例子中是0.05),当然用户可以自行调整为这些参数。
绘制普通形状
PCLVisualizer可视化类允许用户在视窗中绘制一般的图元,这个类常用于显示点云处理算法的可视化结果,例如,通过绘制可视化球体包围聚类得到的点云集以显示聚类结果。shapesVis函数的示例代码用于说明添加形状到视窗的实现方法。添加了四种形状:从点云中的第一个点到最后一个点之间的连线、原点所在平面、以点云中第一个点为中心的球体、沿y轴的锥体,如图2所示。
图2 绘制普通形状
绘制形状的示例代码,出现在将点云添加到视窗的示例代码之后。
viewer->addLine<pcl::PointXYZRGB> (cloud->points[0], cloud->points[cloud->size() - 1], "line");
上面的这行代码用于添加从点云第一个点到最后一个点的连线,绘制点之间连线的方法十分有用,例如,显示两组点云之间的对应点关系时,可方便用户直观的观看点云之间的对应关系。在本例中,线用缺省颜色,用户也可根据自己的要求给线自定义颜色,从点云中一点与其他多个点连接,这种显示方式很常见,也可以绘制多种形状。
viewer->addSphere (cloud->points[0], 0.2, 0.5, 0.5, 0.0, "sphere");
上面的这行代码用于添加以点云中第一个点为中心、半径为0.2的球体,同时也可为该球体自定义颜色。
pcl::ModelCoefficients coeffs; coeffs.values.push_back(0.0); coeffs.values.push_back(0.0); coeffs.values.push_back(1.0); coeffs.values.push_back(0.0); viewer->addPlane (coeffs, "plane");
上面几行代码,将添加绘制平面。在本例中,我们用标准的平面方程(ax + by + cz + d = 0)来定义平面,这个平面以原点为中心,方向沿Z方向,许多绘制形状的函数都采用这种定义系数的方法来定义形状。
coeffs.values.clear(); coeffs.values.push_back(0.3); coeffs.values.push_back(0.3); coeffs.values.push_back(0.0); coeffs.values.push_back(0.0); coeffs.values.push_back(1.0); coeffs.values.push_back(0.0); coeffs.values.push_back(5.0); viewer->addCone (coeffs, "cone");
最后,添加锥形,利用模型系数指定锥形的参数。前三个点为圆锥顶点坐标,之后是为圆锥轴线(顶点指向底面中心的有向线段)的方向。Angle()为α/2(α为圆锥锥角);