point_sift_segmentation.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifndef __POINTSIFT__HH___API
  2. #define __POINTSIFT__HH___API
  3. #include <string>
  4. #include "pointSIFT_API.h"
  5. #include "../error_code/error_code.h"
  6. #include <pcl/point_types.h>
  7. #include <pcl/common/common.h>
  8. /*
  9. * 封装PointSift点云分割网络,输入点云,分割出汽车,检验结果
  10. * 功能包括将pcl点云数据格式转换成原始数据格式float*
  11. * 将识别数据转换成点云数据并用不同颜色区分
  12. */
  13. class Point_sift_segmentation : public PointSifter
  14. {
  15. public:
  16. Point_sift_segmentation(int point_size,int cls,float freq,pcl::PointXYZ minp,pcl::PointXYZ maxp);
  17. //设置要识别的点云区域
  18. Error_manager set_region(pcl::PointXYZ minp, pcl::PointXYZ maxp);
  19. //初始化网络, 加载网络权重
  20. virtual Error_manager init(std::string graph,std::string cpkt);
  21. //分割函数,输入点云,输出各类的点云,并保存中间文件方便查看识别结果.
  22. //cloud:输入点云
  23. //clouds:输出分类好的多个点云(附带颜色,红色为杂物,绿色为车,白色为地面)
  24. virtual Error_manager seg(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud,
  25. std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr>& clouds, std::string save_dir);
  26. virtual ~Point_sift_segmentation();
  27. protected:
  28. //将点云数据转换到float*
  29. //cloud:输入点云
  30. //output:转换结果保存地址,函数内不负责内存的分配与释放
  31. bool Create_data(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, float* output);
  32. //将float*转换成点云
  33. //output:点云对应的类别,大小为 点数*类别
  34. //cloud:点云数据(xyz)
  35. //cloud_seg::输入带颜色的点云
  36. bool RecoveryCloud(float* output, float* cloud, std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr>& cloud_seg);
  37. bool FilterObs(std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr>& cloud_seg, std::string save_dir);
  38. protected:
  39. float m_freq;
  40. pcl::PointXYZ m_minp;
  41. pcl::PointXYZ m_maxp;
  42. };
  43. #endif