PCL中PCLVisualizer类与CloudViewer类简介与区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/misayaaaaa/article/details/83990197

PCLVisualizer可视化类是PCL中功能最全的可视化类,与CloudViewer可视化类相比,PCLVisualizer使用起来更为复杂,但该类具有更全面的功能,如显示法线、绘制多种形状和多个视口。


我们先从官方文档及源码看起:

http://docs.pointclouds.org/1.8.1/classpcl_1_1visualization_1_1_cloud_viewer.html

http://docs.pointclouds.org/1.8.1/classpcl_1_1visualization_1_1_p_c_l_visualizer.html


对于CloudViewer类来说,其方法有大致以下几类(驼峰规则让源码看起来很舒服)

void showCloud()

void wasStopped()

void runOnVisualizationThread()

void runOnVisualizationThreadOnce ()

void removeVisualizationCallable()

boost::signals2::connection registerKeyboardCallback()

boost::signals2::connection registerMouseCallback()

boost::signals2::connection registerPointPickingCallback()

从名字中可以大致看出函数的意义:显示点云、关闭窗口、键盘鼠标的响应。

void runOnVisualizationThread()

void runOnVisualizationThreadOnce ()

这两个函数和PCLVisualizer关联较大,一起使用更加甜蜜。

他们的可以在函数中调用一个对象,在界面中画出想要的东西,但可能是只运行一次的或者一直运行的。

//只会执行一次

void viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{

	//设置背景颜色
	viewer.setBackgroundColor (0.0, 0.0, 0.0);
	
	//球体坐标
 //   pcl::PointXYZ o;
 //   o.x = 0;
 //   o.y = 0;
 //   o.z = 0;
	////添加球体
 //   viewer.addSphere (o, 1, "sphere", 0);
 //   std::cout << "i only run once" << std::endl;

}

//一直会执行下去,直到窗口关闭

void viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
    static unsigned count = 0;
    std::stringstream ss;
    ss << "Once per viewer loop: " << count++;
    viewer.removeShape ("text", 0);
    viewer.addText (ss.str(), 200, 300, "text", 0);
    //viewer.addCoordinateSystem (1.0,0,0,0);
    //FIXME: possible race condition here:
   // user_data++;
}


void OpenOfflineOutputFile::open3DPointCloudFile(std::string& filepath)
{
	pcl::PointCloud<pcl::PointXYZI>::Ptr m_cloud(new pcl::PointCloud<pcl::PointXYZI>);
	pcl::io::loadPCDFile(filepath,*m_cloud);
	
	pcl::visualization::CloudViewer viewer("3D Point Cloud Viewer");
	viewer.showCloud(m_cloud);
	viewer.runOnVisualizationThreadOnce (viewerOneOff);//调用相应函数执行
	viewer.runOnVisualizationThread (viewerPsycho);//调用相应函数执行
	while(!viewer.wasStopped())
	{
	}
}

从上即可看出,PCLVisualizer的强大之处,可以改变窗口背景,还可以添加球体,设置文本,功能特别丰富。

由于PCLVisualizer中功能甘薯太多,这里就不一一列举了,大家可以按需自行查阅。这里仅提供一个PCL中一个小方法:CloudViewer不能完成的界面功能可以使用PCLVisualizer。

猜你喜欢

转载自blog.csdn.net/misayaaaaa/article/details/83990197