我自己整理了一段可视化的代码,想的以后可以直接用很方便,但出现了一点问题,请各位路过的到有帮忙解答。。
实现的功能:如果命令行输入一个点云,则可视化这个点云;如果输入两个,则在同一个窗口显示这两个点云。
问题:运行的时候,如果输入两个点云是没毛病的,但只输入一个 点云时显示不出来。
下面是代码:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/visualization/pcl_visualizer.h>
int
main(int argc, char** argv)
{
std::string filename1 = argv[1];
std::cout << "Reading " << filename1 << std::endl;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>(filename1, *cloud1) == -1) // load the file
{
PCL_ERROR("Couldn't read file1");
return -1;
}
std::cout << "FILE1 points: " << cloud1->points.size() << std::endl;
boost::shared_ptr<pcl::visualization::PCLVisualizer> for_visualizer_v(new pcl::visualization::PCLVisualizer("pointcloud viewer"));
for_visualizer_v->setBackgroundColor(255, 255, 255);
if (argc < 2)
{
for_visualizer_v->setBackgroundColor(100, 100, 100);//第一部分背景
for_visualizer_v->addPointCloud(cloud1, "cloud1");
for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 255, 0, "cloud1");//“cloud”的颜色
for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud1");//“cloud”点云点的大小
}
else
{
std::string filename2 = argv[2];
std::cout << "Reading " << filename2 << std::endl;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>(filename2, *cloud2) == -1) // load the file
{
PCL_ERROR("Couldn't read file2");
return -1;
}
std::cout << "FILE2 points: " << cloud2->points.size() << std::endl;
int v1(0);
for_visualizer_v->createViewPort(0.0, 0.0, 0.5, 1, v1);//位置
for_visualizer_v->setBackgroundColor(100, 100, 100, v1);//第一部分背景
for_visualizer_v->addPointCloud(cloud1, "cloud1", v1);
for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 255, 0, "cloud1");//“cloud”的颜色
for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud1");//“cloud”点云点的大小
int v2(0);
for_visualizer_v->createViewPort(0.5, 0.0, 1, 1, v2);
for_visualizer_v->setBackgroundColor(0, 150, 180, v2);
for_visualizer_v->addPointCloud(cloud2, "cloud2", v2);
for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 255, 0, 0, "cloud2");
for_visualizer_v->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud2");
}
while (!for_visualizer_v->wasStopped())
{
for_visualizer_v->spinOnce(1000);
}
return 0;
}