关于评论
“好的,我会尽快查看。您能告诉我使用cloud_viewer API设置相机参数和背景颜色吗?”
我不是 100% 确定你是否可以使用pcl::visualization::CloudViewer
。但是,如果您将代码移至pcl::visualization::PCLVisualizer
你可以做viewer.setBackgroundColor(double red,double green,double blue)
(其中值范围为 0..1。设置相机)。对于相机,您可以使用pcl::visualization::PCLVisualizer::setCameraPosition http://docs.pointclouds.org/trunk/classpcl_1_1visualization_1_1_p_c_l_visualizer.html#a2232b62d2dd1caead79df190731b810c。将代码从 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;
}
EDIT实际上有一种方法可以做到这一点。通过调查here http://pointclouds.org/documentation/tutorials/cloud_viewer.php,您可以看到您可以运行pcl::visualization::PCLVisualizer
使用pcl::visualization::CloudViewer::runOnVisualizationThreadOnce
or pcl::visualization::CloudViewer::runOnVisualizationThread
功能。为此,您需要创建一个函数来完成所有使用的部分pcl::visualization::PCLVisualizer
并将其传递给CloudViewer::runOnVisualizationThreadOnce
or 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::setBackgroundColor
in setBackground
。为此,我认为直接使用pcl::visualization::PCLVisualizer
好多了。