写pcl181可以运行的icp点到点的算法代码要求输入目标点云为D点云文件点云数据规则点云斯坦福雕像1pcd和源点云D点云文件点云数据规则点云斯坦福雕像2pcd配准好输出DDIANYUNWENJIANJIAicp_pcdpcd
以下是一个使用PCL1.8.1实现ICP点到点算法的代码示例,可以输入目标点云和源点云,并输出配准后的点云文件。
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/registration/icp.h>
int main(int argc, char** argv)
{
if (argc < 4)
{
std::cerr << "Usage: " << argv[0] << " <target_pcd> <source_pcd> <output_pcd>" << std::endl;
return 1;
}
// Load target and source point clouds
pcl::PointCloud<pcl::PointXYZ>::Ptr target_cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr source_cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>(argv[1], *target_cloud) == -1 ||
pcl::io::loadPCDFile<pcl::PointXYZ>(argv[2], *source_cloud) == -1)
{
PCL_ERROR("Failed to load point clouds\n");
return -1;
}
// Perform ICP point-to-point registration
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
icp.setInputSource(source_cloud);
icp.setInputTarget(target_cloud);
pcl::PointCloud<pcl::PointXYZ> output_cloud;
icp.align(output_cloud);
if (icp.hasConverged())
{
std::cout << "ICP converged with score: " << icp.getFitnessScore() << std::endl;
// Save output point cloud
pcl::io::savePCDFileASCII(argv[3], output_cloud);
std::cout << "Saved output point cloud to: " << argv[3] << std::endl;
}
else
{
std::cerr << "ICP failed to converge" << std::endl;
return -1;
}
return 0;
}
其中,<target_pcd>、<source_pcd>和<output_pcd>分别为目标点云、源点云和输出点云的文件路径。如果程序运行成功,会输出ICP收敛的得分并保存配准后的点云文件到指定路径。如果程序运行失败,会输出错误信息并返回-1
原文地址: http://www.cveoy.top/t/topic/hxcW 著作权归作者所有。请勿转载和采集!