版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
//计算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;
}
报错:
: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
n = numofPoints("/home/ly/lego_pcd/pose/lego_pose.txt");
解决办法:
int numofPoints(char* fname){
改成
int numofPoints(char const *fname){