gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:32:43 25 4
gpt4 key购买 nike

我有两个点云,我想在同一个窗口中显示它们。

#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;
}

我只能看到最后一个 PCD 文件。

请注意,我不想使用 pcd_viewer 工具,因为我需要对此数据进行一些其他处理。

最佳答案

关于评论

“好的。我会尽快检查。你能告诉我使用 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::PCLVisualizer 的任何功能>pcl::visualization::CloudViewer::runOnVisualizationThread 函数。为此,您需要创建一个函数来执行使用 pcl::visualization::PCLVisualizer 的所有部分,并将其传递给 CloudViewer::runOnVisualizationThreadOnceCloudViewer::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::setBackgroundColorsetBackground中,我觉得直接用pcl::visualization::PCLVisualizer就可以了更好。

关于c++ - 在 C++ 中使用 PCL 在同一窗口中查看多个点云,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45783815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com