点云txt格式转pcd格式
2016-06-18 07:48
246 查看
之前整理过一个版本,但是使用了结构体,前前后后略显复杂,并且在xcode中运行的时候,面对较大文件特别容易出现内存分配错误,以下内容进行了精简和简化,在配置安装了pcl点云库的project下,可以直接饮用以下代码。
//计算txt点中的个数的方法实现
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;
}
//以下是将txt中点云转成pcd的fuction
void txt2pcd(){
int n =
0; //n用来计文件中点个数
FILE *fp_1;
fp_1 = fopen("tree_01.txt","r");
n = numofPoints("yulan_tree_01.txt");//使用numofPoints函数计算文件中点个数
std::cout << "there are "<<n<<" points in the file..." <<std::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);
//将点云读入并赋给新建点云指针的xyz
double 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
("yulan_tree_01.pcd", cloud);
std::cerr <<"Saved " << cloud.points.size
() <<" data points to test_pcd.pcd." <<
std::endl;
}
*********************************************************************************************************
*********************************************************************************************************
fscanf函数的格式化输出当中,对应的格式化输出类型极容易出现问题,在xcode当中注意下面的问题。
FILE *fp_2 = fopen("data.txt","r");
if(fp_2){
char a[10];
//取字符串需要定义为一个字符数组,若定义为string类型变量或者是定义一个字符数组都容易出内存问题
int d = 0;
fscanf(fp_2, "%s %d\n",a,&d);
cout<<a<<d<<endl;
}
fclose(fp_2);
//计算txt点中的个数的方法实现
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;
}
//以下是将txt中点云转成pcd的fuction
void txt2pcd(){
int n =
0; //n用来计文件中点个数
FILE *fp_1;
fp_1 = fopen("tree_01.txt","r");
n = numofPoints("yulan_tree_01.txt");//使用numofPoints函数计算文件中点个数
std::cout << "there are "<<n<<" points in the file..." <<std::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);
//将点云读入并赋给新建点云指针的xyz
double 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
("yulan_tree_01.pcd", cloud);
std::cerr <<"Saved " << cloud.points.size
() <<" data points to test_pcd.pcd." <<
std::endl;
}
*********************************************************************************************************
*********************************************************************************************************
fscanf函数的格式化输出当中,对应的格式化输出类型极容易出现问题,在xcode当中注意下面的问题。
FILE *fp_2 = fopen("data.txt","r");
if(fp_2){
char a[10];
//取字符串需要定义为一个字符数组,若定义为string类型变量或者是定义一个字符数组都容易出内存问题
int d = 0;
fscanf(fp_2, "%s %d\n",a,&d);
cout<<a<<d<<endl;
}
fclose(fp_2);
相关文章推荐
- Linux触摸屏驱动测试程序
- Python学习8
- python 学习笔记 基础
- [置顶] 【MVC】深入浅出MVC(二)——模板页使用
- Codeforces Round #358 (Div. 2) B. Alyona and Mex
- NFS 文件系统挂载
- HTTPClient
- 关键字球状旋转效果
- c语言中如何创建新的线程
- 流和延时求值
- Linux驱动学习笔记之触摸屏驱动
- SimpleDateFormat 非线程安全
- 统计学、人工智能、机器学习、数据挖掘的区别与联系之(1) 概念
- Codeforces Round #358 (Div. 2) A. Alyona and Numbers
- 3-linux下部署tomcat应用
- Combinations
- mongo扩容
- centos6 安装最新mysql
- 导入一个一个第三方库import 报错头文件不存在
- pandas 数据索引与选取