在一些奇怪的地方,特别是不用c++的地方。点云文件需要转为txt格式的文件,方便调用。
本文写了一个小工具用于把pcd文件转为txt格式

src/pcd2txt.cpp

#include <iostream>
#include <pcl/io/pcd_io.h>  
#include <pcl/point_types.h>  
#include <pcl/filters/voxel_grid.h>

using namespace std;

void pclDownsize(pcl::PointCloud<pcl::PointXYZ>::Ptr in, pcl::PointCloud<pcl::PointXYZ>::Ptr out)
{
    pcl::VoxelGrid<pcl::PointXYZ> down_filter;
    float leaf = 0.1;
    down_filter.setLeafSize(leaf, leaf, leaf);
    down_filter.setInputCloud(in);
    down_filter.filter(*out);
}


int main(int argc, char *argv[])
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    // pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_out(new pcl::PointCloud<pcl::PointXYZ>);
    // Fill in the cloud data  
    if (pcl::io::loadPCDFile<pcl::PointXYZ>("/home/jy/Desktop/2011_09_30/2011_09_30_drive_0027_sync/velodyne_points/out_fliter_010.pcd", *cloud) == -1)
    {
        PCL_ERROR("Couldn't read file chuli.pcd\n");
        return (-1);
    }
    // pclDownsize(cloud,cloud_out);

    cout << "points cloud is successfully loaded! " << endl;
    //for (size_t i = 0; i < cloud->points.size(); i++)
    //  std::cout << " " << cloud->points[i].x << " " << cloud->points[i].y
    //  <<" "<< cloud->points[i].z << std::endl;
    int Num = cloud->points.size();
    double *X = new double[Num] {0};
    double *Y = new double[Num] {0};
    double *Z = new double[Num] {0};
    cout << "size is : " << cloud->points.size() << endl;
    for (size_t i = 0; i <  cloud->points.size(); ++i)
    {
        X[i] = cloud->points[i].x;
        Y[i] = cloud->points[i].y;
        Z[i] = cloud->points[i].z ; 
        cout << "first  " << i << " of " << Num << endl;
    }

    
    ofstream zos("07_flitered_010.txt");
    for (int i = 0; i< cloud->points.size(); i++)
    {
        zos << X[i] << " " << Y[i] << " " << Z[i] << endl;
        cout << "second  " << i << " of " << Num << endl;
    }
    cout << "trans has done!!!" << endl;
    // cin.get();
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

set(CMAKE_BUILD_TYPE "Release")
# 添加c++ 11标准支持
set(CMAKE_CXX_FLAGS "-std=c++11 -O2")

find_package(PCL REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})

add_executable (pcd2txt src/pcd2txt.cpp) #注意这里不能替换
target_link_libraries(pcd2txt ${PCL_LIBRARIES})