PCL 1.8.1点到点ICP算法代码示例:斯坦福雕像配准
以下是可以在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
原文地址: https://www.cveoy.top/t/topic/oZ0f 著作权归作者所有。请勿转载和采集!