PCL:将点云投影到参数模型上

这个程序是将点云投影到一个参数模型上(例如:球形, 或者是平面上),假如是平面的话,通过给定coefficients,就可以了,代码具体如下:

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/ModelCoefficients.h>
#include <pcl/filters/project_inliers.h>
#include <pcl/filters/extract_indices.h>

int main(int argc, char **argv) {
    std::cout << "Hello, world!" << std::endl;


    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_projected (new pcl::PointCloud<pcl::PointXYZ>);

    cloud->width = 500;
    cloud->height = 1;
    cloud->points.resize(cloud->width * cloud->height);

    for(size_t  i = 0; i < cloud->points.size(); ++i )
    {
     cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
     cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
     cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
    }


    std::cerr << "cloud before projection: " << std::endl;
    for(size_t i = 0; i < cloud->points.size(); ++i)
    {
      std::cerr << "   " << cloud->points[i].x << " "
            << cloud->points[i].y << " "<< cloud->points[i].y << " \n";
    }

    //create a set of planar coefficients with X=Y=0, Z = 1
    pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
    coefficients->values.resize (4);
    coefficients->values[0] = coefficients->values[1] = 0;
    coefficients->values[2] = 1.0;
    coefficients->values[3] = 0;

    //create the filtering object
    pcl::ProjectInliers<pcl::PointXYZ> proj;
    proj.setModelType(pcl::SACMODEL_PLANE);
    proj.setInputCloud(cloud);
    proj.setModelCoefficients(coefficients);
    proj.filter(*cloud_projected);


    std::cerr << "cloud after projection: " << std::endl;
    for (size_t i = 0; i < cloud_projected->points.size(); ++i)
    {
      std::cerr << "   " << cloud_projected->points[i].x << " "
          << cloud_projected->points[i].y << " "<< cloud_projected->points[i].z << std::endl;;
    }



      pcl::PCDWriter writer;
      writer.write("original_points.pcd", *cloud, false);
      writer.write("project_inliers.pcd", *cloud_projected, false);




    return 0;
}

最后的结果图

这里写图片描述

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值