源代码

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/features/normal_3d.h>
#include <pcl/surface/gp3.h>
#include <pcl/visualization/pcl_visualizer.h>int main()
{// Load input file into a PointCloud<T> with an appropriate typepcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PCLPointCloud2 cloud_blob; pcl::io::loadPCDFile("/home/oliver/pcd模型/rabbit.pcd", cloud_blob);pcl::fromPCLPointCloud2(cloud_blob, *cloud); //* the data should be available in cloud //pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);tree->setInputCloud(cloud);n.setInputCloud(cloud);n.setSearchMethod(tree);n.setKSearch(30);n.compute(*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>);pcl::concatenateFields(*cloud, *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); // Initialize objectspcl::GreedyProjectionTriangulation<pcl::PointNormal> gp3;pcl::PolygonMesh triangles; // Set the maximum distance between connected points (maximum edge length)gp3.setSearchRadius(0.025); // Set typical values for the parametersgp3.setMu(2.5);gp3.setMaximumNearestNeighbors(100);gp3.setMaximumSurfaceAngle(M_PI / 4); // 45 degreesgp3.setMinimumAngle(M_PI / 18); // 10 degreesgp3.setMaximumAngle(2 * M_PI / 3); // 120 degreesgp3.setNormalConsistency(false); // Get resultgp3.setInputCloud(cloud_with_normals);gp3.setSearchMethod(tree2);gp3.reconstruct(triangles); // Additional vertex informationboost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);viewer->addPolygonMesh(triangles, "triangles");viewer->addPolylineFromPolygonMesh(triangles);//viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();while (!viewer->wasStopped()){viewer->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}// Finishreturn (0);
}

实验结果

PCL中把点云拟合成曲面(附源代码)相关推荐

  1. MATLAB画四分之一球封口,在MATLAB中如何将离散点拟合成曲面图

    刚好之前研究三维曲面的拟合,其实matlab中选择有很多,以下给一个例子吧: clc clear all close all A=[1.109,1.059,1718;2.021,0.841, 1758 ...

  2. PCL中3D点云特征描述与提取(三)

    PCL中3D点云特征描述与提取(三) 1 如何从一个深度图像中提取NARF特征 2 RoPs特征 2.1 理论基础 2.1.1 生物视觉认知学启示 2.1.2 局部参考坐标框架构建 2.1.3 RoP ...

  3. 传统的点云分割方法及PCL中的分割模块

    参考:https://www.cnblogs.com/li-yao7758258/p/10908980.html 三维点云分割是将同属性的点云物体分割出来,以便于单独对该点云物体处理,但是由于点云数据 ...

  4. 斯坦福的著名小兔子模型的点云数据_传统方法的点云分割以及PCL中分割模块

    之前在微信公众号中更新了以下几个章节 1,如何学习PCL以及一些基础的知识 2,PCL中IO口以及common模块的介绍 3,  PCL中常用的两种数据结构KDtree以及Octree树的介绍 有兴趣 ...

  5. 【点云处理技术之PCL】PCL中的基本数据类型——PointCloud与PointT

    文章目录 0. PointCloud 1. PointXYZ--x,y,z 2. PointXYZI--x,y,z,intensity 3. PointXYZRGBA--x,y,z,r,g,b,a 4 ...

  6. PCL:激光点云车道线检测及最小二乘法拟合

    PCL:激光点云车道线检测及最小二乘法拟合 数学部分 代码实现 目前已经将车道线的最小二乘拟合及配合rviz可视化实现了. 数学部分 补充:拟合的数学模型是直线一般式 当x1≠x2,y1≠y2时,直线 ...

  7. PCL中outofcore模块---基于核外八叉树的大规模点云的显示

    写在前面 最近公众号的活动让更多的人加入交流群,尝试提问更多的我问题,群主也在积极的招募更多的小伙伴与我一起分享,能够相互促进. 这里总结群友经常问,经常提的两个问题,并给出我的回答: (1)啥时候能 ...

  8. PCL中的OpenNI点云获取框架(OpenNI Grabber Framework in PCL)

    从PCL 1.0开始,PCL(三维点云处理库Point Cloud Library)提供了一个通用采集接口,这样可以方便地连接到不同的设备及其驱动.文件格式和其他数据源.PCL集成的第一个数据获取驱动 ...

  9. PCL——从PCD文件中读取点云数据

    从PCD文件中读取点云数据 1. 示例代码 1. 示例代码 以下代码均参考PCL官方文档:https://pcl.readthedocs.io/projects/tutorials/en/master ...

  10. PCL中利用KD-Tree搜索空间点云最临近点源码

    0 关于KD-Tree 关于kd-tree的基本原理和构造实现情况可以参考博文:<KD-Tree结构与算法原理> 1 PCL中使用kd-tree进行最近邻点搜索 先分部解释,完整代码见第二 ...

最新文章

  1. js通过正则表达式解析xml 获取指定的内容
  2. Spring Aware 到底是个啥?
  3. GitLab创建空仓库后拉取并上传文件遇到的系列问题
  4. MongoDB 去重(distinct)查询后求总数(count)
  5. mysql innodb 写锁_MySQL-InnoDB-锁
  6. 十大排序算法——选择排序法
  7. 【MFC开发(6)】复选框按钮控件Check Box
  8. wow修改人物模型_人物修改教程更仔细
  9. JAVA音乐社交平台设计计算机毕业设计Mybatis+系统+数据库+调试部署
  10. 南师大GIS考研数据库2013年第四题
  11. Subsequence Weighting
  12. eclipse离线搭建maven项目,配置本地仓库,并创建mybatis项目
  13. 多叉树的构建和树的高度的计算
  14. VC知识库的一篇文章
  15. java中的this
  16. 华为平板M5一键刷ji教程--精简ROOT工具分享
  17. 航天信息Aisino TY-600+K 打印机驱动
  18. 随机过程基础(6)--应用随机过程分析音乐(语音)信号(1)、随机序列功率谱(PSD)
  19. Java使用graphhopper完成路线规划
  20. 观念什么意思_观念是什么意思

热门文章

  1. UVA 10002 Center of Masses
  2. 要开始Ubuntu之旅拉~
  3. C#不同操作系统下,界面大小不一的原因
  4. HDU2066--一个人的旅行(Dijkstra)
  5. 终结者:终止线程循环的方式
  6. 借助Sigar API获取磁盘信息
  7. Java面试题超详细讲解系列之九【SQL语句篇】
  8. 运行elasticsearch时报错:could not find java; set JAVA_HOME or ensure java is in PATH
  9. MySQL的Binlog与Redolog
  10. 22. 切勿直接修改set或multiset中的键