关于评论
“好的。我会尽快检查。您能告诉我使用 cloud_viewer API 设置相机参数和背景颜色吗?”
我不能 100% 确定您是否可以使用 pcl::visualization::CloudViewer 执行此操作。但是,如果您将代码移动到 pcl::visualization::PCLVisualizer,您可以执行 viewer.setBackgroundColor(double red,double green,double blue)(其中值范围为 0..1。设置相机)。对于相机,您可以使用pcl::visualization::PCLVisualizer::setCameraPosition。将您的代码从 CloudViewer 移至 PCLVisualizer 非常简单。
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
int main ()
{
pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr body (new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile ("body.pcd", *body);
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr head (new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile ("head.pcd", *head);
viewer.addPointCloud (body,"body");// note that before it was showCloud
viewer.addPointCloud (head,"head");// note that before it was showCloud
viewer.spin();
return 0;
}
编辑
确实有一种方法可以做到这一点。通过查看here,您可以看到您可以使用pcl::visualization::CloudViewer::runOnVisualizationThreadOnce 或pcl::visualization::CloudViewer::runOnVisualizationThread 函数运行pcl::visualization::PCLVisualizer 的任何函数。为此,您需要创建一个函数来完成使用pcl::visualization::PCLVisualizer 的所有部分并将其传递给CloudViewer::runOnVisualizationThreadOnce 或CloudViewer::runOnVisualizationThread。
例如
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>
void
setBackground (pcl::visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor (1.0, 0.5, 1.0);
}
int main ()
{
pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr body (new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile ("body.pcd", *body);
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr head (new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile ("head.pcd", *head);
viewer.showCloud (body,"body");
viewer.showCloud (head,"head");
viewer.runOnVisualizationThreadOnce(setBackground);
while (!viewer.wasStopped ())
{
}
return 0;
}
唯一的问题是我看不到您如何将参数传递给您想在我们创建的函数中使用的 pcl::visualization::PCLVisualizer 函数(在前面的示例中为 pcl::visualization::PCLVisualizer::setBackgroundColorin setBackground。为此,我觉得直接使用pcl::visualization::PCLVisualizer会好很多。