pcl

PCL1.8.1 Feature

本秂侑毒 提交于 2019-11-29 05:23:02
每个点计算法向量 http://pointclouds.org/documentation/tutorials/how_features_work.php#how-3d-features-work 给定输入点云,为每个点云中的点估计法向量,估计法向量需要指定每个点搜索周边几个点范围作为计算法向量的单位。 此时计算得到的法向量个数cloud_normals->points.size () 与点云个数cloud->points.size ()相等。 #include <pcl/point_types.h> #include <pcl/features/normal_3d.h> #include <pcl/io/pcd_io.h> int main() { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); pcl::io::loadPCDFile("table_scene_lms400.pcd", *cloud); // Create the normal estimation class, and pass the input dataset to it pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne; ne

PCL1.8.1 Feature

萝らか妹 提交于 2019-11-29 05:13:29
每个点计算法向量 http://pointclouds.org/documentation/tutorials/how_features_work.php#how-3d-features-work 给定输入点云,为每个点云中的点估计法向量,估计法向量需要指定每个点搜索周边几个点范围作为计算法向量的单位。 此时计算得到的法向量个数cloud_normals->points.size () 与点云个数cloud->points.size ()相等。 #include <pcl/point_types.h> #include <pcl/features/normal_3d.h> #include <pcl/io/pcd_io.h> int main() { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); pcl::io::loadPCDFile("table_scene_lms400.pcd", *cloud); // Create the normal estimation class, and pass the input dataset to it pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne; ne

PCL1.8.1 采样一致性算法 RANSAC

扶醉桌前 提交于 2019-11-28 22:58:28
采样一致性算法主要是拟合点云中的平面、直线、圆等参数模型。 http://pointclouds.org/documentation/tutorials/random_sample_consensus.php#random-sample-consensus 平面拟合 将远离平面0.01米的点剔除掉 #include <pcl/sample_consensus/ransac.h> #include <pcl/sample_consensus/sac_model_plane.h> pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr final(new pcl::PointCloud<pcl::PointXYZ>); //创建一个平面模型 pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr model_p(new pcl::SampleConsensusModelPlane<pcl::PointXYZ>(cloud)); //用于保存拟合后的点的索引 std::vector<int> inliers; //创建随机采样一致性算法 pcl:

PCL1.8.1 可视化

不打扰是莪最后的温柔 提交于 2019-11-28 17:20:31
可视化点云 #include <pcl/visualization/cloud_viewer.h> pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::visualization::CloudViewer viewer("Viewer"); viewer.showCloud(cloud); while (!viewer.wasStopped ()) { } 可视化多个点云 pcl::visualization::PCLVisualizer 增加多个点云到该可视化界面上。 pcl::PointCloud<pcl::PointXYZ>::Ptr source_cloud(new pcl::PointCloud<pcl::PointXYZ>()); pcl::PointCloud<pcl::PointXYZ>::Ptr transformed_cloud(new pcl::PointCloud<pcl::PointXYZ>()); pcl::visualization::PCLVisualizer viewer ("Matrix transformation example"); // Define R,G,B colors for the point cloud pcl:

PCL1.8.1 滤波

蹲街弑〆低调 提交于 2019-11-28 13:16:33
直通滤波器 指定点云中特定字段域的数字范围,保留或剔除操作 http://pointclouds.org/documentation/tutorials/passthrough.php#passthrough #include <iostream> #include <pcl/point_types.h> #include <pcl/filters/passthrough.h> pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>); // Create the filtering object pcl::PassThrough<pcl::PointXYZ> pass; pass.setInputCloud (cloud); //设置pcl::PointXYZ中字段域z pass.setFilterFieldName ("z"); pass.setFilterLimits (0.0, 1.0); //默认是false,表示保留z字段是0.0-1.0的点云数据 true:不保留 pass

PCL 【点云分割】

雨燕双飞 提交于 2019-11-27 15:59:17
平面模型分割 1、分割代码 //平面分割代码 #include <pcl/ModelCoefficients.h>//模型系数相关头文件 #include <pcl/sample_consensus/method_types.h>//模型定义头文件 #include <pcl/sample_consensus/model_types.h>//随机参数估计方法头文件 #include <pcl/segmentation/sac_segmentation.h>//基于采样一致性分割的类的头文件 pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);//创建分割时所需要的模型系数对象coefficients以及存储内点的点索引集合对象 pcl::PointIndices::Ptr inliers (new pcl::PointIndices); //创建分割对象 pcl::SACSegmentation<pcl::PointXYZ> seg; //可选设置,设置模型系数需要优化 seg.setOptimizeCoefficients (true); //必须设置,设置分割的模型类型、所用的随机参数估计方法、距离阈值、输入点云 seg.setModelType (pcl::SACMODEL_PLANE);

《PCL》点云的最小外包围盒实现

和自甴很熟 提交于 2019-11-27 07:40:47
#include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/common.h> int main(int argc, char** argv) { //定义一个点云cloud //pcl::PointCloud<pcl::PointXYZ> cloud; pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); if (pcl::io::loadPCDFile<pcl::PointXYZ>("E:\\abx.pcd", *cloud) == -1) { std::cout << "读取失败"; } //定义储存极值的两个点 pcl::PointXYZ minPoint, maxPoint; pcl::getMinMax3D(*cloud,minPoint, maxPoint); //输出结果 std::cout << "max:x" << maxPoint.x << std::endl; std::cout << "max:y" << maxPoint.y << std::endl; std::cout << "max:z" << maxPoint.z

Two methods to iterate every points in pointcloud of PCL(两种遍历点云的方式)

懵懂的女人 提交于 2019-11-26 19:15:56
The most common way to do this is by subscript in the [] operand [1] pcl::PointCloud<pcl::PointXYZ>::Ptr pointCloud; for(int nIndex = 0; nIndex < pointCloud->points.size (); nIndex++) { pointCloud->points[nIndex].x; pointCloud->points[nIndex].y; pointCloud->points[nIndex].z; } The more efficient way is to use an iterator [2] [3] for (std::vector<pcl::PointXYZ, Eigen::aligned_allocator<pcl::PointXYZ> >::iterator it = pointCloud.bigin(); it != cropedCloud.end(); it++) { it->getVector3fMap(); // if double wanted, just say it->getVector3fMap().cast<double> } Note: The snippet should be modified to

点云库PCL:NDT配准时出现容器出限的问题及解决

让人想犯罪 __ 提交于 2019-11-26 17:25:21
前言    在PCL库中,精配准除了我们最常用的ICP算法以及相关的变形算法,如GICP算法外,另外还包含了NDT算法(正态分布变换),它不需要提供较好的初值,且速度比ICP算法更为快速。   当然,也会有着一定的缺陷:收敛域差、代价函数不连续等,NDT原理以及步骤等具体可查看 https://www.cnblogs.com/li-yao7758258/p/10705228.html ,个人觉得,这篇文章写得比较详细具体。 版本     PCL1.8.0 问题    PCL在使用NDT(Normal Distribution Transform)对两个点云进行配准时会出现容器出限的错误。 解决方法    在设置参数时,将体素分辨率调大,从而能使每个体素中能有六个以上的点。 原因解析   从原理角度分析:体素分辨率太小,使得对目标点云分割时每个体素中达不到计算协方差矩阵的点数。   从代码角度分析:在ndt.h中有着一个变量为target_cells_,它的类型为VoxelGridCovariance,此类的作用为体素划分,且计算每个体素内点的协方差以及形心。   当我们分辨率设置过小时,每个体素内的点云数均无法达到设置的min_points_per_voxel_,从而使target_cells_为空,无法对其初始化,导致target_cells_中的维度变量Dim_为0

VS2017配置PCL点云

纵饮孤独 提交于 2019-11-26 14:39:16
最近开始接触了3D技术,所以不得不使用俗称2D图像中的opencv的3D技术:PCL;好吧,闲话少说,配置PCL的过程其实网上已经有很多了;写的很详细,这里只是提点一下; 开始安装,一路点下一步安装下去; 中间会有一个Add PCL to the system PATH for all users 然后中间还会弹出一个openNI2.2,这个的话安装到你的第三方库下面,也就是3rdParty。 然后就完成了!!!!!! 其实安装的很顺利,这个还是挺简单的,然后就是加载到VS2017上面,其实配置的过程也很顺利;但是最后的成像不知道为啥就是有点麻烦,成不了像; 其实我配置的应该没得错;但是不知道为啥总是成不了像;不信你们看; 然后直接生成项目,然后调试: 说实话,这些东西我都大概知道是个啥,但是生成了啊,害得我还白白高兴了一场,结果,哎不说了,找到解决方法之后,我再发出来吧,我觉得没有找到靠谱的解决方案。 大家伙也可以告诉我是啥原因! 未完待续。。。。。。。。。 来源: https://www.cnblogs.com/caizhou520/p/11324301.html