博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PCL区域生长分割
阅读量:3956 次
发布时间:2019-05-24

本文共 2567 字,大约阅读时间需要 8 分钟。

直接看代码吧,基于PCL实现。库文件自己筛选以下吧

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;void CreateCloudFromTxt(const std::string& file_path,pcl::PointCloud
::Ptr cloud){ std::ifstream file(file_path.c_str()); std::string line; std::string no_use; pcl::PointXYZ point; while (getline(file, line)) { string::iterator it; for (it = line.begin(); it < line.end(); it++) { if (*it == ',') { line.erase(it); line.insert(it, ' '); it--; } } std::stringstream ss(line); ss >> point.x; ss >> point.y; ss >> point.z; cloud->push_back(point); } file.close();}void visualization(pcl::PointCloud
::Ptr cloud){ boost::shared_ptr
viewer(new pcl::visualization::PCLVisualizer("viewer")); pcl::visualization::PointCloudColorHandlerCustom
single_color(cloud, 255, 0, 0); viewer->addPointCloud
(cloud, single_color, "example"); viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "example"); while (!viewer->wasStopped()) { viewer->spinOnce(100); boost::this_thread::sleep(boost::posix_time::microseconds(100000)); }}int main(int argc, char** argv){ pcl::PointCloud
::Ptr cloud(new pcl::PointCloud
); pcl::PointCloud
::Ptr normals (new pcl::PointCloud
); CreateCloudFromTxt(argv[1],cloud); pcl::search::Search
::Ptr tree = boost::shared_ptr
> (new pcl::search::KdTree
); pcl::NormalEstimation
normal_estimator; normal_estimator.setSearchMethod (tree); normal_estimator.setInputCloud (cloud); normal_estimator.setKSearch (20); normal_estimator.compute (*normals); pcl::RegionGrowing
reg; reg.setMinClusterSize (50); reg.setMaxClusterSize (1000000); reg.setSearchMethod (tree); reg.setNumberOfNeighbours (30); reg.setInputCloud (cloud); //reg.setIndices (indices); reg.setInputNormals (normals); reg.setSmoothnessThreshold (3.0 / 180.0 * M_PI); reg.setCurvatureThreshold (1.0); std::vector
cluster_indices; reg.extract (cluster_indices); std::vector
::Ptr> Eucluextra; //用于储存欧式分割后的点云 for (std::vector
::const_iterator it = cluster_indices.begin (); it != cluster_indices.end (); ++it) { pcl::PointCloud
::Ptr cloud_cluster(new pcl::PointCloud
); for (std::vector
::const_iterator pit = it->indices.begin (); pit != it->indices.end (); pit++) cloud_cluster->points.push_back(cloud->points[*pit]); cloud_cluster->width = cloud_cluster->points.size (); cloud_cluster->height = 1; cloud_cluster->is_dense = true; Eucluextra.push_back(cloud_cluster); } for(int k=0;k

转载地址:http://rxxzi.baihongyu.com/

你可能感兴趣的文章