本文就自己在pcl中碰到过的copyPointCloud两种使用方法进行了总结:
Part 1:完全拷贝到新的点云之中:pcl::copyPointCloud (const pcl::PointCloud &cloud_in,pcl::PointCloud &cloud_out)
pcl::PointCloud<pcl::PointXYZ>::Ptr src(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointNormal>::Ptr src_PN(new pcl::PointCloud<pcl::PointNormal>);
pcl::io::loadPCDFile("src.pcd",*src);//载入原数据
pcl::io::loadPCDFile("src_pn.pcd", *src_PN);//载入原数据
pcl::copyPointCloud(*src, *src_PN);//src中的xyz覆盖掉src_PN中的xyz值,然后把xyz+normal的信息给src_PN
pcl::io::savePCDFile("src_with_normal.pcd", *src_PN);
运行结果:
Part 2:部分索引的使用:pcl::copyPointCloud (const pcl::PointCloud &cloud_in, const std::vector &indices,pcl::PointCloud &cloud_out)
pcl::PointCloud<pcl::PointXYZ>::Ptr src(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile("src.pcd",*src);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloudout(new pcl::PointCloud<pcl::PointXYZ>);
std::vector<int>indexs = { 0,2,6 };//索引
pcl::copyPointCloud(*src, indexs, *cloudout);
pcl::io::savePCDFile("cloud_out.pcd", *cloudout);//只取src中的第1,第3个,第7个点赋值到新的cloudout中。
程序输出结果:
Part 3:其余的重载函数:PCL中还有很多,但是自己暂时未用到,见下图。后面用到了在补充。
具体详情可见:http://docs.pointclouds.org/1.8.1/group__common.html#gab99511f54b952b8a5608e4ed7f41a68d