#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL);VTK_MODULE_INIT(vtkInteractionStyle);#define BOOST_TYPEOF_EMULATION#include #include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include <pcl/registration/icp.h>#include <pcl/filters/voxel_grid.h>#include <pcl/visualization/pcl_visualizer.h>int main(int argc, char** argv){pcl::PointCloudpcl::PointXYZ::Ptr cloud_in(new pcl::PointCloudpcl::PointXYZ);pcl::PointCloudpcl::PointXYZ::Ptr cloud_out(new pcl::PointCloudpcl::PointXYZ);pcl::io::loadPCDFilepcl::PointXYZ("D:\点云文件\雕像1.pcd", *cloud_in);pcl::io::loadPCDFilepcl::PointXYZ("D:\点云文件\雕像2.pcd", *cloud_out);pcl::VoxelGridpcl::PointXYZ voxel_grid;voxel_grid.setInputCloud(cloud_in);voxel_grid.setLeafSize(0.01f, 0.01f, 0.01f);pcl::PointCloudpcl::PointXYZ::Ptr cloud_in_downsampled(new pcl::PointCloudpcl::PointXYZ);voxel_grid.filter(*cloud_in_downsampled);voxel_grid.setInputCloud(cloud_out);pcl::PointCloudpcl::PointXYZ::Ptr cloud_out_downsampled(new pcl::PointCloudpcl::PointXYZ);voxel_grid.filter(*cloud_out_downsampled);pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;icp.setInputCloud(cloud_in_downsampled);icp.setInputTarget(cloud_out_downsampled);icp.setMaxCorrespondenceDistance(0.05); // Decrease the maximum correspondence distance for better accuracyicp.setTransformationEpsilon(1e-8);icp.setMaximumIterations(100);icp.align(*cloud_in_downsampled);std::cout << "has converged: " << icp.hasConverged() << " score: " << icp.getFitnessScore() << std::endl;std::cout << icp.getFinalTransformation() << std::endl;pcl::visualization::PCLVisualizer viewer("ICP Registration");viewer.addPointCloud(cloud_in_downsampled, pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ(cloud_in_downsampled, 255, 0, 0), "cloud_in");viewer.addPointCloud(cloud_out_downsampled, pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ(cloud_out_downsampled, 0, 255, 0), "cloud_out");viewer.addPointCloudpcl::PointXYZ(cloud_in, pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ(cloud_in, 255, 0, 0), "cloud_in_original");viewer.addPointCloudpcl::PointXYZ(cloud_in_downsampled, pcl::visualization::PointCloudColorHandlerCustompcl::PointXYZ(cloud_in_downsampled, 0, 0, 255), "cloud_aligned");viewer.spin();pcl::io::savePCDFile("D:\DIANYUNWENJIANJIA\icp_pcd.pcd", *cloud_in_downsampled);return 0


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

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