1,normalestimation对点云法线的评估,只输出法线向量,并不输出xyz值。
如果输出类型是pointnormal,那么这点云的法向量有值,xyz值都是0
2,添加点云xyz数据。可以使用 pcl::concatenatefields(*a,*b,*c)函数
pcl::PointCloud<pcl::PointNormal>::Ptr cloud_con(new pcl::PointCloud<pcl::PointNormal>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);std::string filename = "D:\\Desktop\\pacl_learning\\cloud\\table_voxel.pcd";pcl::io::loadPCDFile(filename, *cloud);//法线评估pcl::NormalEstimation<pcl::PointXYZ, pcl::PointNormal>::Ptr normal_es(new pcl::NormalEstimation<pcl::PointXYZ, pcl::PointNormal>);normal_es->setInputCloud(cloud);pcl::search::KdTree < pcl::PointXYZ >::Ptr tree(new pcl::search::KdTree < pcl::PointXYZ >);normal_es->setSearchMethod(tree);normal_es->setKSearch(20);normal_es->compute(*cloud_con);cout << cloud_con->points.size() << endl;//不添加这一步的话,所或得的pointnormal类型是没有xyz数据的,都是0-0-0//也就是说normalestimation对点云法线的评估,只输出法线向量,并不输出xyz值。pcl::concatenateFields(*cloud, *cloud_con, *cloud_con);pcl::PointCloud<pcl::PointXYZ>::Ptr aa(new pcl::PointCloud<pcl::PointXYZ>);for (int i=0;i<cloud_con->points.size();i++){pcl::PointXYZ po;po.x = cloud_con->points[i].x;po.y = cloud_con->points[i].y;po.z = cloud_con->points[i].z;cout << po.x << "--" << po.y << "--" << po.z << endl;aa->push_back(po);}