PCL:自定义点云PointT数据类型及字段信息

PCL点云自定义数据类型

PCL官方例子

PCL官方链接
The following code snippet example creates a new point type that contains XYZ data (SSE padded), together with a test float.


#define PCL_NO_PRECOMPILE
#include <pcl/memory.h>
#include <pcl/pcl_macros.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>

struct MyPointType
{
    
    
  PCL_ADD_POINT4D;                  // preferred way of adding a XYZ+padding
  float test;
  PCL_MAKE_ALIGNED_OPERATOR_NEW     // make sure our new allocators are aligned
} EIGEN_ALIGN16;                    // enforce SSE padding for correct memory alignment

POINT_CLOUD_REGISTER_POINT_STRUCT (MyPointType,           // here we assume a XYZ + "test" (as fields)
                                   (float, x, x)
                                   (float, y, y)
                                   (float, z, z)
                                   (float, test, test)
)

int
main (int argc, char** argv)
{
    
    
  pcl::PointCloud<MyPointType> cloud;
  cloud.points.resize (2);
  cloud.width = 2;
  cloud.height = 1;

  cloud[0].test = 1;
  cloud[1].test = 2;
  cloud[0].x = cloud[0].y = cloud[0].z = 0;
  cloud[1].x = cloud[1].y = cloud[1].z = 3;

  pcl::io::savePCDFile ("test.pcd", cloud);
}

自定义示例

参考官方是咧,可以根据自己的需求添加想要的字段信息,下面给出一个例子

struct PointXYZIRT {
    
    
 PCL_ADD_POINT4D;
 uint8_t intensity;
 uint16_t ring;
 double timestamp;
 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
 }EIGEN_ALIGN16;
POINT_CLOUD_REGISTER_POINT_STRUCT(PointXYZIRT,
 (float, x, x)
 (float, y, y)
 (float, z, z)
 (uint8_t, intensity, intensity)
 (uint16_t, ring, ring)
 (double, timestamp, timestamp) 
) 

转成PointXYZI

void PointXYZIRT2PointXYZI(const pcl::PointCloud<PointXYZIRT>::Ptr in_cloud_xyzirt,
pcl::PointCloud<pcl::PointXYZI>::Ptr in_cloud)
{
    
            
  in_cloud->header = in_cloud_xyzirt->header;
  in_cloud->width = in_cloud_xyzirt->width;
  in_cloud->height = in_cloud_xyzirt->height;
  in_cloud->is_dense = in_cloud_xyzirt->is_dense;
  for(size_t i=0;i<in_cloud_xyzirt->points.size();i++)
  {
    
             
    pcl::PointXYZI p = in_cloud_xyzirt->at(i);;
    p.x = in_cloud_xyzirt->points.x;
    p.y = in_cloud_xyzirt->points.y;
    p.z = in_cloud_xyzirt->points.z;
    p.intensity = in_cloud_xyzirt->points.intensity;
    in_cloud->points.push_back(p);
  }
  
}

猜你喜欢

转载自blog.csdn.net/qq_39506862/article/details/128409541
今日推荐