#ifndef LIBAPI_3D_H #define LIBAPI_3D_H #include "Libapi2D3D.h" #include #include #include #include "open3d/Open3D.h" using namespace open3d; class Cal3D { public: // 采集点云数据 static int LibapiCapCloudPoints(std::shared_ptr& cloud_ptr); // 读取点云数据 static int LibapiReadCloudPointsPly(const std::string plyPath, std::shared_ptr& cloud_ptr); // 保存点云数据 static int LibapiSaveCloudPointsPly(std::string savaPath, std::shared_ptr& cloud_ptr); // 点云数据筛选 static int LibapiFilterCloudPointsByDist(std::shared_ptr& src_cloud_ptr, std::shared_ptr& dst_cloud_ptr, float minusx, float x, float minusy, float y, float minusz, float z); // 点云修正 static int LibapiCorrectCloudPoint(std::shared_ptr& src_cloud_ptr, std::shared_ptr& dst_cloud_ptr, int node); // 点云转数组 static int LibapiCloudPointToVec(std::shared_ptr& src_cloud_ptr, std::vector& dst_3d); // 点云数据转换 static int LibapiRotAndTrans(std::shared_ptr& cloud_ptr); // 点云数据投影 static int LibapiCloudPointsPorject(std::vector& src_points3D, cv::Mat& cameraMatrix, std::vector& dst_points2D, cv::Mat* im_2D3D, bool doTest, cv::Mat& src_im); // 点云数据投影,按照预埋件区域ROI进行筛选 static int LibapiCloudPointsPorject( std::vector& src_points3D, cv::Mat& cameraMatrix, std::vector >& vecConners, cv::Mat* im2D3D, std::vector>& vecInConners2D, std::vector>& vecInConners3D); // 用于测试点云数据投影产生的2D3D数据 static int LibapiCloudPointProjectTest(cv::Mat& im_2D3D); // 点云数据转换为2D3D点对数据 static int LibapiCloudPointsToCMeasureInfo(cv::Mat& im_2D3D, CMeasureInfo& CMeasureInfo); // 通过H,计算2D坐标的3D坐标 static int LibapiCalConner3D(const std::vector& vec2D_2, cv::Mat& H, std::vector vec3d_n, std::vector& vec3D_4); }; #endif