PCL入门系列 —— 点云数据加载及保存

PCL入门系列 —— 点云数据加载及保存


前言

随着工业自动化、智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别、定位、抓取、测量,缺陷检测等),而针对不同作业场景进行解决方案设计时,通常会借助PCL、OpenCV、Eigen等简单方便的开源算法库进行方案的快速验证和迭代以满足作业场景下的目标需求。

为了让对工业机器视觉方向感兴趣的同学能够少走一些弯路,故推出了此一系列简易入门教程示例,让初次使用者能够最简单直观地感受到当前所用算法模块的执行效果。

后续会逐步扩增与工业机器视觉相关的一些其它内容,如:

项目案例剖析场景数据分析基础算法模块相机评测 等;

如有兴趣可加入群聊(若入群二维码被屏蔽,则可以通过Q群(1032861997)或评论、私信博主“群聊”,邀请入群),与同道同学及圈内同行一起交流讨论。

在这里插入图片描述


程序说明

展示点云数据的加载和存储;

输出结果

在这里插入图片描述

代码示例

/*
 * @File: load_pcd.cpp
 * @Brief: pcl course
 * @Description: 展示点云数据的加载和存储
 * @Version: 0.0.1
 * @Author: MuYv
 */
#include <iostream>
#include <string>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>



int main(int argc, char** argv){
    
    
    if(argc != 2){
    
    
        std::cout<<"Usage: exec cloud_file_path"<<std::endl;
        return -1;
    }
    const std::string kCloudFilePath = argv[1];     // ../clouds/cabinet_color_cloud.pcd

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_src(new pcl::PointCloud<pcl::PointXYZ>());
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_tmp(new pcl::PointCloud<pcl::PointXYZ>());

    // 成功返回0,失败返回-1
    if(-1 == pcl::io::loadPCDFile(kCloudFilePath,*cloud_src)){
    
    
        std::cout<<"load pcd file failed. please check it."<<std::endl;
        return -2;
    }

    // 输出cloud_src相关信息
    std::cout<<"cloud_src info:\n"<<*cloud_src<<std::endl<<std::endl;

    const int kPointNum = cloud_src->size();
    // 如果已知最大数据量,则提前申请好足够的内存,避免在数据处理图中频繁申请更大容量的内存
    cloud_tmp->reserve(kPointNum);
    for(int idx=0; idx<kPointNum; idx+=10){
    
    
        const auto& pt = cloud_src->points[idx];
        cloud_tmp->push_back(pt);
    }

    // 输出cloud_tmp相关信息
    std::cout<<"cloud_tmp info:\n"<<*cloud_tmp<<std::endl;

    // 保存点云数据
    const std::string saved_pcd_path = "./cloud_tmp.pcd";   // 存储路径为完整路径,且包含后缀
    bool binary_mode = false;   // binary 或 ascii 模式, 默认是ascii.
    // 成功返回0,失败返回-1
    if(-1 == pcl::io::savePCDFile(saved_pcd_path, *cloud_tmp, binary_mode)){
    
    
        std::cout<<"save pcd file failed."<<std::endl;
        return -1;
    }else{
    
    
        std::cout<<"pcd file saved at "<<saved_pcd_path<<std::endl<<std::endl;
    }

    return 0;
}

总结

在方案设计及开发验证时,通常会将中间环节的点云数据以本地文件的形式保存下来进行单独分析;
在分析点云数据时,较为常用的点云可视化分析软件有CloudCompare,简称CC,模型数据可视化分析软件可使用MeshLab;


注:部分测试所用点云数据来源于网络,如有侵权,请联系博主删除,谢谢。

猜你喜欢

转载自blog.csdn.net/memorynode/article/details/124417440