#pragma once #include #include #include #include "data_def_api.h" #include "data_def.h" #include "logger.h" #include "imstorage_manager.h" namespace graft_cv { class CChessboardCalibration { public: CChessboardCalibration(ConfigParam&c, CGcvLogger*pLog = 0); ~CChessboardCalibration(); int cross_detect(PositionInfo& posinfo); float* get_raw_point_cloud(int &data_size); int load_data(float*pPoint, int pixel_size, int pt_size, int dtype, const char* fn = 0); void set_image_saver(CImStoreManager** ppis) { m_ppImgSaver = ppis; } private: //global configure parameters ConfigParam& m_cparam; CGcvLogger * m_pLogger; int m_dtype; string m_pcdId; CImStoreManager** m_ppImgSaver; pcl::PointCloud::Ptr m_raw_cloud; double m_cloud_mean_dist; double min_dist_of_lines( pcl::ModelCoefficients::Ptr line_1,//input pcl::ModelCoefficients::Ptr line_2//input ); void virtual_cross_of_lines( pcl::ModelCoefficients::Ptr line_1, //input pcl::ModelCoefficients::Ptr line_2,//input pcl::PointXYZ& cross_pt//output ); int read_ply_file(const char* fn); double compute_nearest_neighbor_distance(pcl::PointCloud::Ptr); void cloud_mean_dist( pcl::PointCloud::Ptr in_cloud, //input 输入点云数据 double& mean_dist ); void gen_result_img( pcl::PointCloud::Ptr in_cloud_raw,//输入,未经过滤的整体点云in_cloud_raw, pcl::PointCloud::Ptr in_cloud_edge, //输入,边缘点云, std::vector& cross_points, //输入,交叉点, cv::Mat& rst_img //输出,图片, 1280*1280 ); void viewer_cloud(pcl::PointCloud::Ptr, std::string&winname); void viewer_cloud(pcl::PointCloud::Ptr, std::string&winname); void viewer_cloud_debug( pcl::PointCloud::Ptr cloud, pcl::PointXYZ&p,//抓取点 pcl::PointXYZ &p_ref,//分叉点 pcl::PointXYZ &root_pt, std::string&winname); void viewer_cloud_cluster(pcl::PointCloud::Ptr cloud, std::vectorcluster_center, std::string&winname); void viewer_cloud_cluster_box( pcl::PointCloud::Ptr cloud, std::vector&cluster_center, std::vector&cluster_box, std::vector >& clt_line_idx, std::string&winname); }; };