#include\x3ciostream\x3e#include\x3comp.h\x3e#include\x3cpcl/io/ply_io.h\x3e#include\x3cpcl/point_types.h\x3e#include\x3cpcl/common/common.h\x3e#include\x3cpcl/visualization/pcl_visualizer.h\x3e#include\x3cboost/thread/thread.hpp\x3e#include\x3cpcl/console/time.h\x3eusing\x20namespace\x20std;/**\x20\brief\x20点云沿Y坐标轴进行等距切片*\x20\param[m_cloud]\x20输入点云*\x20\param[m_Delta]\x20切片厚度*\x20\param[m_dPlatform]\x20相邻切片之间的间隔*\x20\param[m_OpenMap]\x20是否启动多线程加速*\x20\param[out]\x20切片点的索引*/std::vector\x3cint\x3esliceePointIndices(pcl::PointCloud\x3cpcl::PointXYZ\x3e::Ptr&\x20m_cloud,float\x20m_Delta\x20=\x200.00005,float\x20m_dPlatform\x20=\x200.0002,bool\x20m_OpenMap\x20=\x20true){pcl::PointXYZ\x20minPt,maxPt;pcl::getMinMax3D(m_cloud,minPt,maxPt);pcl::console::TicToc\x20time;time.tic();std::vector\x3cint\x3eidx;if(m_OpenMap\x20==\x20true){std::vector\x3cint\x3epoint_idx(m_cloud->size(),-1);{#pragma\x20omp\x20parallel\x20for\x20num_threads(6)for(int\x20i\x20=\x200;i\x20\x3c\x20m_cloud->size();++i){int\x20index\x20=\x20floor((m_cloud->points[i].y\x20-\x20minPt.y)\x20/\x20m_dPlatform);float\x20sliceMin\x20=\x20minPt.y\x20+\x20index\x20\x20m_dPlatform;if((m_cloud->points[i].y\x20\x3e=\x20sliceMin)\x20&&\x20(m_cloud->points[i].y\x20\x3c\x20sliceMin\x20+\x20m_Delta)){point_idx[i]\x20=\x20index;}}}}for(int\x20i\x20=\x200;i\x20\x3c\x20point_idx.size();++i){if(point_idx[i]\x20\x3e\x20-1){idx.push_back(i);}}cout\x20\x3c\x3c\x20'并行加速时的算法运行时间:'\x3c\x3c\x20time.toc()\x20\x3c\x3c\x20' ms'\x3c\x20endl;}else{for(int\x20i\x20=\x200;i\x20\x3c\x20m_cloud->size();++i){int\x20index\x20=\x20floor((m_cloud->points[i].y\x20-\x20minPt.y)\x20/\x20m_dPlatform);float\x20sliceMin\x20=\x20minPt.y\x20+\x20index\x20*\x20m_dPlatform;if((m_cloud->points[i].y\x20\x3e=\x20sliceMin)\x20&&\x20(m_cloud->points[i].y\x20\x3c\x20sliceMin\x20+\x20m_Delta)){idx.push_back(i);}}}cout\x20\x3c\x3c\x20'算法运行时间:'\x3c\x3c\x20time.toc()\x20\x3c\x3c\x20' ms'\x3c\x20endl;}return\x20idx;}int\x20main(){pcl::PointCloud\x3cpcl::PointXYZ\x3e::Ptr\x20cloud(new\x20pcl::PointCloud\x3cpcl::PointXYZ\x3e);pcl::io::loadPLYFile('D:\DIANYUNWENJIANJIA\test1_ply.ply',*cloud);float\x20Delta\x20=\x200.00005;float\x20dPlatform\x20=\x200.00002;bool\x20OpenMap\x20=\x20true;std::vector\x3cint\x3eidx\x20=\x20sliceePointIndices(cloud,Delta,dPlatform,OpenMap);pcl::PointCloud\x3cpcl::PointXYZ\x3e::Ptr\x20slicing_cloud(new\x20pcl::PointCloud\x3cpcl::PointXYZ\x3e);pcl::copyPointCloud(*cloud,idx,*slicing_cloud);pcl::visualization::PointCloudColorHandlerCustom\x3cpcl::PointXYZ\x3ecolor_handler(slicing_cloud,255,0,255);pcl::visualization::PointCloudColorHandlerCustom\x3cpcl::PointXYZ\x3ebg_color_handler(cloud,0,0,0);boost::shared_ptr\x3cpcl::visualization::PCLVisualizer\x3eviewer(new\x20pcl::visualization::PCLVisualizer('3D\x20Viewer'));viewer->setWindowName('点云切片');viewer->addPointCloud\x3cpcl::PointXYZ\x3e(slicing_cloud,color_handler,'slicing\x20cloud');viewer->addPointCloud\x3cpcl::PointXYZ\x3e(cloud,bg_color_handler,'background');viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,0,0,1,'background');while(!viewer->wasStopped()){viewer->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}return\x200


原文地址: https://www.cveoy.top/t/topic/pxFN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录