1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 点云文件格式转换——TXT xyz等转换成pcd

点云文件格式转换——TXT xyz等转换成pcd

时间:2019-08-22 17:34:28

相关推荐

点云文件格式转换——TXT xyz等转换成pcd

刚接触3D扫描这一领域,在初期就遇到了很多问题,扫描得到的点云数据格式不支持MATLAB及PCL等软件使用,点云读取都过不了,何谈对点云数据进行处理?

直接说转换的方法吧,代码转换还是比较方便的。

#include "stdafx.h" #include <pcl/io/pcd_io.h> #include<iostream> using namespace std;int numofPoints(char* fname){int n = 0;int c = 0;FILE *fp;fp = fopen(fname, "r");do{c = fgetc(fp);if (c == '\n'){++n;}} while (c != EOF);fclose(fp);return n;}int main(){int n = 0; //n用来计文件中点个数FILE *fp_1;fp_1 = fopen("1.xyz", "r");n = numofPoints("1.xyz");//使用numofPoints函数计算文件中点个数 cout << "there are " << n << " points in the file..." << endl;//新建一个点云文件,然后将结构中获取的xyz值传递到点云指针cloud中。 pcl::PointCloud<pcl::PointXYZ> cloud;cloud.width = n;cloud.height = 1;cloud.is_dense = false;cloud.points.resize(cloud.width * cloud.height);//将点云读入并赋给新建点云指针的xyzdouble x, y, z;int i = 0;**while (3 == fscanf(fp_1, "%lf %lf %lf\n", &x, &y, &z))**{//cout << x << " " << y << " " << z << endl;这句要不要都行,如果输出的话转换的速度会很慢,因为每个点都会读取出来cloud.points[i].x = x;cloud.points[i].y = y;cloud.points[i].z = z;++i;}fclose(fp_1);//将点云指针指向的内容传给pcd文件 pcl::io::savePCDFileASCII("03.pcd", cloud);std::cerr << "Saved " << cloud.points.size() << " data points to test_pcd.pcd." << std::endl;system("pause");return 0;}

敲黑板!!

在使用fscanf函数时,注意图中画圈的位置,这里如果你的源文件数据与数据之间是用逗号隔开,则改为 while (3 == fscanf(fp_1, “%lf,%lf,%lf\n”, &x, &y, &z)),否则另存PCD格式之后的XYZ值全部为0。

TXT格式文件转换为PCD格式的方法一样,只要把代码中两处1.xyz改为你的文件名+后缀就OK。

注:需要把你所需要转换格式的源文件放在代码源文件的相同文件下。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。