我一直在尝试根据PCL网站上的this tutorial使用PCL可视化工具,并且正在使用以下方法来可视化点云:
boost::shared_ptr<pcl::visualization::PCLVisualizer> createViewer (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud, std::string& viewerName)
{
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer (viewerName));
viewer->setBackgroundColor (0, 0, 0);
viewer->addPointCloud<pcl::PointXYZ> (cloud, viewerName);
viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, viewerName);
viewer->addCoordinateSystem (1.0);
viewer->initCameraParameters ();
return viewer;
}
void visualizePointCloud (pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
{
std::string viewerName = "3D Viewer: Cloud";
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
viewer = createViewer(cloud, viewerName);
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep (boost::posix_time::microseconds (100000));
}
}
一切都可视化,但是我似乎无法摆脱困境!
如果您通过单击“ x”关闭查看器窗口,则什么也没有发生,wasStopped()
仍返回false
,并且程序被卡住。
任何人都知道如何正确终止查看器,以便程序可以继续其余的代码吗?我只是愚蠢吗? 提前谢谢了!
P.S .:我在Mac OS 10.13.6上,带有PCL 1.8.1(通过Homebrew安装)。
答案 0 :(得分:1)
您可以随时使用方法关闭打开的查看器
viewer->close();
我想它是在PCL 1.6中添加的:http://www.pcl-users.org/How-to-close-the-window-of-a-PCLViewer-and-how-to-make-it-stop-by-code-td3824712.html
答案 1 :(得分:0)
我有点尴尬,但是答案真的很简单……尝试了Flumenque的解决方案后偶然发现了它……事实证明一切都按预期进行,我实在太简单了,无法意识到:
可以通过按键盘上的“ q”来终止查看器。但是,即使窗口已经具有焦点,也必须首先在可视化区域内单击!
以防万一有人将其与我的愚蠢相提并论,我会把它写出来...;)