2D下利用PCL获取文件夹下所有pcd文件中的点云二维坐标

整体实现思路是:首先获取文件夹下所有文件名,然后遍历打开文件用PCL从中获取坐标

程序所需头文件:

#include <iostream>
#include <sys/types.h>
#include <dirent.h>
#include <vector>
#include <cstring>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <ros/ros.h>
// function:获取路径下所有文件名,存在filenames中
void getFiles(string path, vector<string>& filenames)
{
	DIR *pDir;
    struct dirent* ptr;
    if(!(pDir = opendir(path.c_str()))){
        cout<<"Folder doesn't Exist!"<<endl;
        return;
    }
    while((ptr = readdir(pDir))!=0) {
        if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0){
            filenames.push_back(path + "/" + ptr->d_name);
    	}
    }
    closedir(pDir);
}
// function:读取整个文件夹下pcd文件,通过PCL将其中的坐标存储在position_x和position_y中
void Get_position_data(float *position_x, float *position_y, int &position_num) {
    string filePath = "/home/user/pcd";   // 待读取文件夹路径
    vector<string> files;
    //获取该路径下的所有文件
    getFiles(filePath, files);
    for (int i=0; i<(int)files.size(); i++) {
        pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

	    if(pcl::io::loadPCDFile<pcl::PointXYZ>(files[i], *cloud)==-1) {  //*打开点云文件 
		    PCL_ERROR("Couldn't read file test_pcd.pcd\n");
		    return ;
	    }
        for(size_t t=0; t<cloud->points.size(); ++t) {
            position_x[position_num] = cloud->points[t].x;
            position_y[position_num] = cloud->points[t].y;
            position_num++;
        }
    } 
    return ;
}

使用方式:调用Get_position_data()即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值