Ubuntu 18.04.06PCLC++学习记录(二)下

@[TOC]PCL中IO模块的学习

学习背景

参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接

学习内容

将PCD数据转化为PLY数据格式。PCD数据(Point Cloud Data,点云数据)是一种三维数据格式,它使用一系列点的x,y,z坐标值来表示物体的几何形状和外观特征。每个点都可以携带额外的信息,如颜色、法线向量、曲率等属性。

源代码及所用函数

源代码

#include<iostream>
#include<string> 
#include<pcl/io/pcd_io.h>//PCD读写类相关的头文件
#include<pcl/io/ply_io.h>//PLY读写相关类文件
#include<pcl/console/print.h>//用于打印消息与日志
#include<pcl/console/parse.h>//用于解析命令行参数
#include<pcl/console/time.h>//用于计时

/* -------------------------------- 判断能否打开文件 -------------------------------- */
bool LoadCloud(const std::string &filename,pcl::PCLPointCloud2 &cloud)
{
    pcl::console::TicToc tt;//启动计时器
    pcl::console::print_highlight("Loading");//控制台高亮打印
    pcl::console::print_value("%s",filename.c_str());//将文件名转化为C风格字符串并打印
    tt.tic();//开始计时
    /* ----------------------------- 判断从文件加载点云数据是否成功 ---------------------------- */
    if (pcl::io::loadPCDFile(filename,cloud)<0)//filename是一个字符串,表示要加载的PCD文件路径和名称cloud是一个pcl::PCLPointCloud2对象的引用,用于存储加载的点云数据。
    {
        return false;
    }
    pcl::console::print_info("[done,");
    pcl::console::print_value("%g",tt.toc());
    pcl::console::print_info("ms:");
    pcl::console::print_value("%d",cloud.width*cloud.height);
    pcl::console::print_info("points]\n");
    pcl::console::print_info("Available dimensions");
    pcl::console::print_value("%s\n",pcl::getFieldsList(cloud).c_str());
    return true;
}

/* filename表示要保存的文件名,cloud是要保存的点云对象,binary表示是否以二进制格式保存,use_camera表示是否使用相机参数*/
void SaveCloud(const std::string &filename,const pcl::PCLPointCloud2 &cloud,bool binary,bool use_camera)
{
    pcl::console::TicToc tt;
    tt.tic();
    pcl::console::print_highlight("Saving");
    pcl::console::print_value("%s",filename.c_str());
    pcl::PLYWriter writer;
    writer.write(filename,cloud,Eigen::Vector4f::Zero(),Eigen::Quaternionf::Identity(),binary,use_camera);
    pcl::console::print_info("[done,");
    pcl::console::print_value("%g",tt.toc());
    pcl::console::print_info("ms:");
    pcl::console::print_value("%d",cloud.width*cloud.height);
    pcl::console::print_info("points]\n");
}

int main(int argc,char** argv)
{
    pcl::PCLPointCloud2 cloud;
    // std::cout<<"请输入需要转换的PCD文件名"<<std::endl;
    // std::string PCDfilename;
    // std::getline(std::cin,PCDfilename);
    // std::cout<<"请输入转换后的PLY文件名"<<std::endl;
    // std::string PLYfilename;
    // std::getline(std::cin,PLYfilename);

    bool format = true;
    bool use_camera = false;//是否包含相机信息
    if(!LoadCloud("/home/jojo/PointCloud/PCLB/IO/06/pcd2ply/test_pcd.pcd",cloud))
    {
        return -1;
    }
    SaveCloud("/home/jojo/PointCloud/PCLB/IO/06/pcd2ply/test_ply.ply",cloud,format,use_camera);
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.1 FATAL_ERROR)#指定CMake的最低版本要求为3.1
project(pcd2ply)#设置项目名称
set(CMAKE_CXX_STANDARD 11)#设置C++编译器版本为C++11
find_package(PCL 1.7 REQUIRED)#查找PCL库,要求版本为1.7或更高。
include_directories(${PCL_INCLUDE_DIRS})#将PCL库的头文件目录添加到包含路径中
link_directories(${PCL_LIBRARY_DIRS})#将PCL库的库文件目录添加到链接器搜索路径中。
add_definitions(${PCL_DEFINITIONS})#添加PCL库的编译器定义
add_executable (pcd2ply pcd2ply.cpp)#需要修改
target_link_libraries (pcd2ply ${PCL_LIBRARIES})#将PCL库链接到可执行文件目标。

结果

在这里插入图片描述

函数

大部分函数在上篇
pcl::io::loadPCDFile(),返回值为整数0表示成功加载。

//这个函数的原型如下
int pcl::io::loadPCDFile (const std::string &file_name, pcl::PCLPointCloud2 &cloud)// file_name是一个字符串,表示要加载的PCD文件的文件路径和名称。
// cloud是一个pcl::PCLPointCloud2类型的引用,用于存储从文件中加载的点云数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值