C++ 使用C+;中的PCL在同一窗口中查看多个点云+;

C++ 使用C+;中的PCL在同一窗口中查看多个点云+;,c++,point-cloud-library,C++,Point Cloud Library,我有两个点云,我想在同一个窗口中可视化 #include <pcl/io/io.h> #include <pcl/io/pcd_io.h> #include <pcl/visualization/cloud_viewer.h> int main () { pcl::visualization::CloudViewer viewer("Cloud Viewer"); pcl::PointCloud<pcl::PointXYZRGBA&g

我有两个点云,我想在同一个窗口中可视化

#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>

int main ()
{
    pcl::visualization::CloudViewer 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);
    viewer.showCloud (head);
    while (!viewer.wasStopped ())
    {
    }
    return 0;
}
#包括
#包括
#包括
int main()
{
pcl::visualization::CloudViewer查看器(“云查看器”);
pcl::PointCloud::Ptr主体(新pcl::PointCloud);
pcl::io::loadPCDFile(“body.pcd”,*body);
pcl::PointCloud::Ptr头(新pcl::PointCloud);
pcl::io::loadPCDFile(“head.pcd”,*head);
viewer.showCloud(body);
viewer.showCloud(head);
而(!viewer.wastopped())
{
}
返回0;
}
我只能看到最后一个PCD文件

请注意,我不想使用pcd_查看器工具,因为我需要对该数据进行其他处理。

根据,您可以提供显示点云的名称。
如果提供相同的名称,则会覆盖现有云

这基本上意味着更改以下调用:

viewer.showCloud (body);
viewer.showCloud (head);
与:

当然,您可以使用您想要的任何名称。

根据,您可以为显示点云提供名称。
如果提供相同的名称,则会覆盖现有云

这基本上意味着更改以下调用:

viewer.showCloud (body);
viewer.showCloud (head);
与:

当然,你可以使用任何你想要的名字。

关于评论


“好的。我很快会检查。你能告诉我使用cloud_viewer API设置相机参数和背景色吗?”

我不能100%确定您是否可以使用
pcl::visualization::CloudViewer
实现这一点。但是,如果将代码移动到
pcl::visualization::PCLVisualizer
,则可以执行
viewer.setBackgroundColor(双红、双绿、双蓝)
(其中值范围为0..1.以设置相机)。对于相机,您可以使用。将代码从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;
}
唯一的问题是,我看不出如何可能将参数传递给希望在我们包装的函数中使用的
pcl::visualization::PCLVisualizer
函数(在前面的示例中,
setBackground
中的
pcl::visualization::PCLVisualizer::setBackgroundColor
。对于这一点,我认为直接使用
pcl::visualization::PCLVisualizer
要好得多。

关于评论

  pclPointCloud<pcl::PointXYZ>::Ptr head (new pcl::PointCloud<pcl::PointXYZ>);
  pcl::PointCloud<pcl::PointXYZ>::Ptr body (new pcl::PointCloud<pcl::PointXYZ>);

 //initialize the point cloud viewer
  pcl::visualization::PCLVisualizer viewer ("");

 //visualize head
  pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>  source_cloud_color_handler (head, 230, 20, 20);
  viewer.addPointCloud (head, source_cloud_color_handler, "head");

  //visualize body
  pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> transformed_cloud_color_handler (body, 255, 255, 255); // Whiite
  viewer.addPointCloud (body, transformed_cloud_color_handler, "body");

  viewer.addCoordinateSystem (1.0, "body", 0);
  viewer.setBackgroundColor(0.05, 0.05, 0.05, 0); // Setting background to a dark grey
  viewer.setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "head");

“好的。我很快会检查。你能告诉我使用cloud_viewer API设置相机参数和背景色吗?”

我不能100%确定是否可以使用
pcl::visualization::CloudViewer
执行此操作。但是,如果将代码移动到
pcl::visualization::PCLVisualizer
中,则可以执行
viewer.setBackgroundColor(双红、双绿、双蓝)
(其中值范围为0..1.以设置相机)。对于相机,您可以使用。将代码从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;
}
唯一的问题是,我看不出如何可能将参数传递给希望在我们包装的函数中使用的
pcl::visualization::PCLVisualizer
函数(在前面的示例中,
setBackground
中的
pcl::visualization::PCLVisualizer::setBackgroundColor
。为此,我认为直接使用
pcl::visualizator::PCLVisualizer
要好得多。

pclPointCloud::Ptr head(新的pcl::PointCloud);
  pclPointCloud<pcl::PointXYZ>::Ptr head (new pcl::PointCloud<pcl::PointXYZ>);
  pcl::PointCloud<pcl::PointXYZ>::Ptr body (new pcl::PointCloud<pcl::PointXYZ>);

 //initialize the point cloud viewer
  pcl::visualization::PCLVisualizer viewer ("");

 //visualize head
  pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>  source_cloud_color_handler (head, 230, 20, 20);
  viewer.addPointCloud (head, source_cloud_color_handler, "head");

  //visualize body
  pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> transformed_cloud_color_handler (body, 255, 255, 255); // Whiite
  viewer.addPointCloud (body, transformed_cloud_color_handler, "body");

  viewer.addCoordinateSystem (1.0, "body", 0);
  viewer.setBackgroundColor(0.05, 0.05, 0.05, 0); // Setting background to a dark grey
  viewer.setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "head");
pcl::PointCloud::Ptr主体(新pcl::PointCloud); //初始化点云查看器 pcl::visualization::PCLVisualizer查看器(“”); //想象头部 pcl::visualization::PointCloudColorHandlerCustomSource_cloud_color_handler(头部,230,20,20); viewer.addPointCloud(head,source_cloud_color_handler,“head”); //形象化身体 pcl::visualization::PointCloudColorHandler自定义转换的_cloud_color_处理程序(body,255,255);//white viewer.addPointCloud(body,已转换的_cloud_color_handler,“body”); viewer.addCoordinateSystem(1.0,“主体”,0); viewer.setBackgroundColor(0.05,0.05,0.05,0);//将背景设置为深灰色 viewer.setPointCloudRenderingProperties(pcl::visualization::pcl_VISUALIZER_POINT_大小,2,“头”);
pclPointCloud::Ptr头(新pcl::PointCloud);
pcl::PointCloud::Ptr主体(新pcl::PointCloud);
//初始化点云查看器
pcl::visualization::PCLVisualizer查看器(“”);
//想象头部
pcl::visualization::PointCloudColorHandlerCustomSource_cloud_color_handler(头部,230,20,20);
viewer.addPointCloud(head,source_cloud_color_handler,“head”);
//形象化身体
pcl::visualization::PointCloudColorHandler自定义转换的_cloud_color_处理程序(body,255,255);//white
viewer.addPointCloud(body,已转换的_cloud_color_handler,“body”);
viewer.addCoordinateSystem(1.0,“主体”,0);
viewer.setBackgroundColor(0.05,0.05,0.05,0);//将背景设置为深灰色
viewer.setPointCloudRenderingProperties(pcl::visualization::pcl_VISUALIZER_POINT_大小,2,“头”);

好的。我很快会检查。你能告诉我使用cloud\u viewer API设置相机参数和背景颜色吗?你认为这是一个更好的选择吗?可以在PCL Visualizer上查看多个云吗?你可以使用该方法。只需在可视化线程上为其指定一个你想要执行的操作的函数。函数参数是PCLVisualizer。老实说,我对PCLOkay不是很精通。我会很快检查它。你能告诉我使用cloud_viewer API设置相机参数和背景颜色吗?你认为这是一个更好的选择吗?可以在PCL Visualizer上查看多个云吗?你可以使用该方法。只需给它一个你想在visualizat上执行的功能ion线程。函数参数是一个PCLVisualizer。老实说,我不太精通PCL