以下是可以在PCL 1.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::cout << "Usage: icp_point_to_point <source_pcd_file> <target_pcd_file> <output_pcd_file>" << std::endl;
    return -1;
  }

  // Load point clouds
  pcl::PointCloud<pcl::PointXYZ>::Ptr source_cloud (new pcl::PointCloud<pcl::PointXYZ>);
  pcl::PointCloud<pcl::PointXYZ>::Ptr target_cloud (new pcl::PointCloud<pcl::PointXYZ>);
  if (pcl::io::loadPCDFile<pcl::PointXYZ> (argv[1], *source_cloud) == -1 || pcl::io::loadPCDFile<pcl::PointXYZ> (argv[2], *target_cloud) == -1)
  {
    std::cout << "Error loading point clouds!" << std::endl;
    return -1;
  }

  // ICP registration
  pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
  icp.setInputSource(source_cloud);
  icp.setInputTarget(target_cloud);
  pcl::PointCloud<pcl::PointXYZ> final_cloud;
  icp.align(final_cloud);

  if (icp.hasConverged())
  {
    std::cout << "ICP converged." << std::endl;
    pcl::io::savePCDFileBinary(argv[3], final_cloud);
  }
  else
  {
    std::cout << "ICP did not converge." << std::endl;
    return -1;
  }

  return 0;
}

在命令行中运行该程序,即可通过以下命令实现输入'D:\点云文件\点云数据\规则点云\斯坦福\雕像1.pcd'和'D:\点云文件\点云数据\规则点云\斯坦福\雕像2.pcd',输出'D:\DIANYUNWENJIANJIA\icp_pcd.pcd':

icp_point_to_point D:\点云文件\点云数据\规则点云\斯坦福\雕像1.pcd D:\点云文件\点云数据\规则点云\斯坦福\雕像2.pcd D:\DIANYUNWENJIANJIA\icp_pcd.pcd
PCL 1.8.1点到点ICP算法代码示例:斯坦福雕像配准

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

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