#ifndef __POINTSIFT__HH___API #define __POINTSIFT__HH___API #include #include "pointSIFT_API.h" #include "../error_code/error_code.h" #include #include /* * 封装PointSift点云分割网络,输入点云,分割出汽车,检验结果 * 功能包括将pcl点云数据格式转换成原始数据格式float* * 将识别数据转换成点云数据并用不同颜色区分 */ class Point_sift_segmentation : public PointSifter { public: Point_sift_segmentation(int point_size,int cls,float freq,pcl::PointXYZ minp,pcl::PointXYZ maxp); //设置要识别的点云区域 Error_manager set_region(pcl::PointXYZ minp, pcl::PointXYZ maxp); //初始化网络, 加载网络权重 virtual Error_manager init(std::string graph,std::string cpkt); //分割函数,输入点云,输出各类的点云,并保存中间文件方便查看识别结果. //cloud:输入点云 //clouds:输出分类好的多个点云(附带颜色,红色为杂物,绿色为车,白色为地面) virtual Error_manager seg(pcl::PointCloud::Ptr cloud, std::vector::Ptr>& clouds, std::string save_dir); virtual ~Point_sift_segmentation(); protected: //将点云数据转换到float* //cloud:输入点云 //output:转换结果保存地址,函数内不负责内存的分配与释放 bool Create_data(pcl::PointCloud::Ptr cloud, float* output); //将float*转换成点云 //output:点云对应的类别,大小为 点数*类别 //cloud:点云数据(xyz) //cloud_seg::输入带颜色的点云 bool RecoveryCloud(float* output, float* cloud, std::vector::Ptr>& cloud_seg); bool FilterObs(std::vector::Ptr>& cloud_seg, std::string save_dir); protected: float m_freq; pcl::PointXYZ m_minp; pcl::PointXYZ m_maxp; }; #endif