求助帖,pcl 点云可视化。

我自己整理了一段可视化的代码,想的以后可以直接用很方便,但出现了一点问题,请各位路过的到有帮忙解答。。

实现的功能:如果命令行输入一个点云,则可视化这个点云;如果输入两个,则在同一个窗口显示这两个点云。

问题:运行的时候,如果输入两个点云是没毛病的,但只输入一个 点云时显示不出来。

下面是代码:

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

猜你喜欢

转载自blog.csdn.net/yamgyutou/article/details/106106385