PCL 之 stl转pcd
好记性不如烂笔头
一直都觉得写博客好麻烦,但最近学东西太多,老觉得刚学完的东西就忘了,原来记在笔记本的笔记找半天不知道在那本上,所以渐有用博客当笔记的想法,就那stl转pcd文件作为在csdn上自己写的博客练手。
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/io/vtk_lib_io.h>//loadPolygonFileOBJ所属头文件;
#include <pcl/point_cloud.h>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;
using namespace pcl;
//读取CAD模型
vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
reader->SetFileName("/data/cube.stl");
reader->Update();
//先转出到ply格式
vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
polydata = reader->GetOutput();
polydata->GetNumberOfPoints();
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>());
//从ply转pcd
pcl::io::vtkPolyDataToPointCloud(polydata, *cloud);
//显示点云
pcl::visualization::PCLVisualizer visu3("stl2pcd");
// visu3.setBackgroundColor(255, 255, 255);
visu3.addPointCloud(cloud, "input_cloud");
visu3.spin();
//保存pcd文件
pcl::io::savePCDFileASCII("stl2pcd.pcd", *cloud);
同时显示两个视窗
pcl::visualization::PCLVisualizer visu3("stl2pcd");
visu3.initCameraParameters();
int v1(0), v2(1);
visu3.createViewPort(0.0, 0.0, 1, 1, v1);//xmin,ymin,xmax,ymax
visu3.createViewPort(1, 0, 1, 1, v2);
visu3.setBackgroundColor(0, 1, 0, v1);
// visu3->setBackgroundColor(0, 0, 1, v2);
visu3.createViewPortCamera(v1);//使得两个窗口的视图操作独立
visu3.createViewPortCamera(v2);
visu3.addPolygonMesh(mesh, "mesh",v1);
visu3.addPointCloud(cloud, "cloud",v2);
visu3.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 1, 0, "cloud");//点云上色
visu3.spin();