|
- int
- main (int argc, char** argv)
- {
- // Load input file into a PointCloud<T> with an appropriate type
- pcl::PointCloud<pcl::PointXYZ>::Ptr mls_points (new pcl::PointCloud<pcl::PointXYZ>);//定义点云对象指针
- sensor_msgs::PointCloud2 cloud_blob;
- pcl::io::loadPCDFile ("table_scene_lms400_downsampled.pcd", cloud_blob);//加载PCD文件
- pcl::fromROSMsg (cloud_blob, * mls_points);//数据最终存储在mls_points中
- //* the data should be available in cloud
- // Normal estimation*
- pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>);//定义kd-tree指针
- tree->setInputCloud(mls_points);//用mls_points构建tree对象
- pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;//法线估计对象
- n.setInputCloud(mls_points);//为法线估计对象设置输入点云
- n.setSearchMethod(tree);//设置搜索方式
- n.setKSearch(20);//设置k搜索的k值为20
- pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);//存储估计的法线
- n.compute(*normals);//估计法线存储结果到normals中
- //以上预先估计出数据中每个点的法线
- //* normals should not contain the point normals + surface curvatures
- // Concatenate the XYZ and normal fields*
- pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals (new pcl::PointCloud<pcl::PointNormal>);
- concatenateFields(* mls_points, * normals, * cloud_with_normals);//存储有向点云
- //* cloud_with_normals = cloud + normals
- // Create search tree*
- pcl::search::KdTree<pcl::PointNormal>::Ptr tree2 (new pcl::search::KdTree<pcl::PointNormal>);//定义搜索树对象
- tree2->setInputCloud(cloud_with_normals);//利用点云构建搜索树
- // Init objects
- pcl::PolygonMesh mesh;//网格模型存储位置??????????
- pcl::MarchingCubesGreedy<pcl::PointNormal> mc;//定义MC类对象 mc
- // Set parameters
- double leafSize = 0.01;//体素大小
- float isoLevel = 0.5;//等值面提取时所使用的水平值
- mc.setInputCloud(cloud_with_normals);//设置输入点云为有向点云
- mc.setSearchMethod(tree2);//设置搜索方式
- mc.setLeafSize(leafSize);//设置体素大小0.01
- mc.setIsoLevel(isoLevel);//设置等值面提取时所使用的水平值0.5
- // Reconstruct
- mc.reconstruct (mesh);//执行重建
- std::cout << "MCGreedy reconstruct done"<<std::endl;
- }
复制代码 请问这个代码最后的图像输出该怎么写?呵呵 |
|