欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

点云TXT转化为pcd格式

程序员文章站 2022-03-30 22:56:33
...
// changepcd.cpp : 定义控制台应用程序的入口点。
//

#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("cat.txt","r");
    n = numofPoints("cat.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;
	system("pause");
  return 0;
}
 

相关标签: TXT PCD