#include <vtkAutoInit.h>\nVTK_MODULE_INIT(vtkRenderingOpenGL);\nVTK_MODULE_INIT(vtkInteractionStyle);\n#define BOOST_TYPEOF_EMULATION\n#include \n#include <pcl/io/pcd_io.h>\n#include <pcl/point_types.h>\n#include <pcl/registration/icp.h>\n#include <pcl/features/normal_3d.h>\n#include <pcl/filters/voxel_grid.h>\n#include <pcl/visualization/pcl_visualizer.h>\n\nint main(int argc, char** argv)\n{\n pcl::PointCloudpcl::PointXYZ::Ptr cloud_in(new pcl::PointCloudpcl::PointXYZ);\n pcl::PointCloudpcl::PointXYZ::Ptr cloud_out(new pcl::PointCloudpcl::PointXYZ);\n\n pcl::io::loadPCDFilepcl::PointXYZ("D:\点云文件\雕像1.pcd", *cloud_in);\n pcl::io::loadPCDFilepcl::PointXYZ("D:\点云文件\雕像2.pcd", *cloud_out);\n\n pcl::VoxelGridpcl::PointXYZ voxel_grid;\n voxel_grid.setInputCloud(cloud_in);\n voxel_grid.setLeafSize(0.01f, 0.01f, 0.01f);\n pcl::PointCloudpcl::PointXYZ::Ptr cloud_in_downsampled(new pcl::PointCloudpcl::PointXYZ);\n voxel_grid.filter(*cloud_in_downsampled);\n\n voxel_grid.setInputCloud(cloud_out);\n pcl::PointCloudpcl::PointXYZ::Ptr cloud_out_downsampled(new pcl::PointCloudpcl::PointXYZ);\n voxel_grid.filter(*cloud_out_downsampled);\n\n pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;\n ne.setInputCloud(cloud_in_downsampled);\n pcl::search::KdTreepcl::PointXYZ::Ptr tree(new pcl::search::KdTreepcl::PointXYZ());\n ne.setSearchMethod(tree);\n pcl::PointCloudpcl::Normal::Ptr cloud_in_normals(new pcl::PointCloudpcl::Normal);\n ne.setKSearch(10);\n ne.compute(*cloud_in_normals);\n\n ne.setInputCloud(cloud_out_downsampled);\n ne.setSearchMethod(tree);\n pcl::PointCloudpcl::Normal::Ptr cloud_out_normals(new pcl::PointCloudpcl::Normal);\n ne.setKSearch(10);\n ne.compute(*cloud_out_normals);\n\n pcl::IterativeClosestPointWithNormals<pcl::PointXYZ, pcl::PointXYZ, pcl::Normal> icp;\n icp.setInputCloud(cloud_in_downsampled);\n icp.setInputTarget(cloud_out_downsampled);\n icp.setInputNormals(cloud_in_normals);\n icp.setMaximumIterations(100);\n icp.setMaxCorrespondenceDistance(0.05);\n icp.setRANSACOutlierRejectionThreshold(0.05);\n icp.align(*cloud_in_downsampled);\n\n std::cout << "has converged: " << icp.hasConverged() << " score: " << icp.getFitnessScore() << std::endl;\n std::cout << icp.getFinalTransformation() << std::endl;\n\n pcl::visualization::PCLVisualizer viewer("ICP Registration");\n viewer.addPointCloud(cloud_in_downsampled, pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ(cloud_in_downsampled, 255, 0, 0), "cloud_in");\n viewer.addPointCloud(cloud_out_downsampled, pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ(cloud_out_downsampled, 0, 255, 0), "cloud_out");\n viewer.addPointCloudpcl::PointXYZ(cloud_in, pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ(cloud_in, 255, 0, 0), "cloud_in_original");\n viewer.addPointCloudpcl::PointXYZ(cloud_in_downsampled, pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ(cloud_in_downsampled, 0, 0, 255), "cloud_aligned");\n viewer.spin();\n\n pcl::io::savePCDFile("D:\DIANYUNWENJIANJIA\icp_pcd.pcd", *cloud_in_downsampled);\n\n return 0;\n}


原文地址: https://www.cveoy.top/t/topic/pvmZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录