【PCL】(十一)使用参数化模型对点云进行投影

(十一)使用参数化模型对点云进行投影

以下代码实现将点云投影到平面参数模型上。

project_inliers.cpp

#include <iostream>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/ModelCoefficients.h>
#include <pcl/filters/project_inliers.h>

int main ()
{
   
  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  = 5;
  cloud->height = 1;
  cloud->points.resize (cloud->width * cloud->height);

  for (auto& point: *cloud)
  {
   
    point.x = 1024 * rand () / (RAND_MAX + 1.0f);
    point.y = 1024 * rand () / (RAND_MAX + 1.0f);
    point.z = 1024 * rand () / (RAND_MAX + 1.0f);
  }

  std::cout << "Cloud before projection: " << std::endl;
  for (const auto& point: *cloud)
    std::cout << "    " << point.x << " "
                        << point.y << " "
                        << point.z << std::endl;


  // 创建一个平面模型:ax+by+cz+d=0,其中a=b=d=0,c=1。实际上是一个X-Y平面。
  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;

  // 创建一个ProjectInliers对象
  pcl::ProjectInliers<pcl::PointXYZ> proj;
  proj.setModelType (pcl::SACMODEL_PLANE);
  proj.setInputCloud (cloud);
  proj.setModelCoefficients (coefficients);  // 使用上面定义的coefficients作为要投影的模型。
  proj.filter (*cloud_projected);

  std::cout << "Cloud after projection: " << std::endl;
  for (const auto& point: *cloud_projected)
    std::cout << "    " << point.x << " "
                        << point.y << " "
                        << point.z << std::endl;

  return (0);
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)

project(project_inliers)

find_package(PCL 1.2 REQUIRED)

include_directories(${
   PCL_INCLUDE_DIRS})
link_directories(${
   PCL_LIBRARY_DIRS})
add_definitions(${
   PCL_DEFINITIONS})

add_executable (project_inliers project_inliers.cpp)
target_link_libraries (project_inliers ${
   PCL_LIBRARIES})

编译后运行:

./project_inliers
Cloud before projection: 
    0.352222 -0.151883 -0.106395
    -0.397406 -0.473106 0.292602
    -0.731898 0.667105 0.441304
    -0.734766 0.854581 -0.0361733
    -0.4607 -0.277468 -0.916762
Cloud after projection: 
    0.352222 -0.151883 0
    -0.397406 -0.473106 0
    -0.731898 0.667105 0
    -0.734766 0.854581 0
    -0.4607 -0.277468 0

图示:X,Y,Z轴的颜色分别为红,绿,蓝;红点为原始点,绿点为原始点投影到X-Y平面的点

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 16:16:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 16:16:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 16:16:04       82 阅读
  4. Python语言-面向对象

    2024-02-22 16:16:04       91 阅读

热门阅读

  1. 深入理解CAS

    2024-02-22 16:16:04       49 阅读
  2. 05 SS之结合SS+Redis+JWT实现认证

    2024-02-22 16:16:04       40 阅读
  3. 【软考】类

    2024-02-22 16:16:04       56 阅读
  4. python opencv图像模糊

    2024-02-22 16:16:04       47 阅读