123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #ifndef __POINTSIFT__HH___API
- #define __POINTSIFT__HH___API
- #include <string>
- #include "pointSIFT_API.h"
- #include "../error_code/error_code.h"
- #include <pcl/point_types.h>
- #include <pcl/common/common.h>
- /*
- * 封装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<pcl::PointXYZ>::Ptr cloud,
- std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr>& clouds, std::string save_dir);
- virtual ~Point_sift_segmentation();
- protected:
- //将点云数据转换到float*
- //cloud:输入点云
- //output:转换结果保存地址,函数内不负责内存的分配与释放
- bool Create_data(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, float* output);
- //将float*转换成点云
- //output:点云对应的类别,大小为 点数*类别
- //cloud:点云数据(xyz)
- //cloud_seg::输入带颜色的点云
- bool RecoveryCloud(float* output, float* cloud, std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr>& cloud_seg);
- bool FilterObs(std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr>& cloud_seg, std::string save_dir);
- protected:
- float m_freq;
- pcl::PointXYZ m_minp;
- pcl::PointXYZ m_maxp;
- };
- #endif
|