PCL PLY转PCD及批量处理
来源:互联网 发布:慈溪行知职高论坛 编辑:程序博客网 时间:2024/05/17 08:15
学习点云库PCL过程中,总会遇到数据格式转换,流行的3D数据基准库 大都是ply格式的,并且是二进制格式,ply在PCL库中是可以处理的,但是更好的做其他处理,我一般都先把ply转pcd,方便的以后处理,格式转为ascii的,这样就可以用txt ultraedit打开 其数据是可看到的。
ply 一般有两种格式 头文件处理VCGLIB生成 的ply 用简单的程序ply->pcd 就可以转化pcd,VTK 生成的 则 ply->vtk->pcd, 程序如下:
* 两种格式都能处理//pcd文件显示pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>());//pcl::io::loadPCDFile("model1.pcd",*cloud);//ply文件显示pcl::PolygonMesh mesh;vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();pcl::io::loadPolygonFilePLY("mario/Scene1.ply", mesh);// ply另存vtk//pcl::io::saveVTKFile("temp.vtk", mesh);pcl::io::mesh2vtk(mesh, polydata);pcl::io::vtkPolyDataToPointCloud(polydata, *cloud);//两种存贮方式 pcd另存pcdpcl::PCDWriter pcdwriter;//pcdwriter.write<pcl::PointXYZRGBA>("save_ply2vtk2pcd.pcd", *cloud);pcl::io::savePCDFileASCII("mario/Scene11.pcd", *cloud);*//*VCGLIB生成 的plypcl::PCLPointCloud2 clod;pcl::io::loadPLYFile("mario/Scene1.ply", clod);pcl::io::savePCDFile("mario/Scene111.pcd", clod);*//*VCGLIB生成 的ply pcl::PCLPointCloud2 clod;pcl::PLYReader reader;reader.read("mario/Scene1.ply", clod);pcl::PCDWriter writer;writer.writeASCII("mario/Scene1111.pcd", clod); writeBinary*/ply 的数据 一般都是
点属性:xyzrgba
边属性:索引值
由于pcd的颜色编码不同,程序吧ply转出pcd后,颜色值四通道 变成一个值,以上三种转法,会把ply的rgba数据 转化 很大的一个数 几千万 真的,我当时也蒙了,难道说颜色丢失了 没有转换过了,但是想到去年的时候,确实颜色也转过来了,我就用显示pcl viewer 来看颜色是否转过来了。
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>());pcl::io::loadPCDFile("mario/Scene1111.pcd", *cloud);boost::shared_ptr<pcl::visualization::PCLVisualizer> viewe(new pcl::visualization::PCLVisualizer("ss"));viewe->initCameraParameters();viewe->setBackgroundColor(0.3,0.3,0.3);viewe->addCoordinateSystem(1.0f);pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGBA> color(cloud);viewe->addPointCloud<pcl::PointXYZRGBA>(cloud, color, "cloud");viewe->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_FONT_SIZE, 3, "cloud");while (!viewe->wasStopped()){viewe->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}
有个坑 就是pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGBA> color(cloud);PointCloudColorHandlerRGBField 一定不能写成 RGBAField,尽管pcd是PointXYZRGBA格式的,这样才能完全显示颜色 保真
以上便是转换代码,下面是对所有PLY格式的文件进行批量处理的程序:第一种 stringstream 名字要整齐一致
stringstream ss_tou;ss_tou<<"E://datasets//SHOT//dataset4 kinect cvlab//3D models scenes//CVLab//xx//"; // 最后一定要zai加个 //for (int i = 1; i<24; i++){ stringstream ss;ss<<ss_tou.str()<<i<<".ply";第二种 把所有ply放到一个data文件下,在定义一个txt,存放个ply的相对路径,这种方法不对名字做要求
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr clud(new pcl::PointCloud<pcl::PointXYZRGBA>());//pcl::io::loadPCDFile("model1.pcd",*cloud);//修改后缀名 路径不变std::string file = "standford/mario_object_templates.txt";std::ifstream input(file);std::string ply_file, pcd_file;while (input.good()) //判断文件是否结束{std::getline(input, ply_file);std::string::size_type pos = ply_file.rfind("ply"); // 双字符if (ply_file.empty() || ply_file.at(0) =='#' ) continue;pcl::PolygonMesh mesh;vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();pcl::io::loadPolygonFilePLY(ply_file, mesh);pcl::io::mesh2vtk(mesh, polydata);pcl::io::vtkPolyDataToPointCloud(polydata, *clud);pcd_file = ply_file;if (pos != std::string::npos) //npos就是到头了 pcd_file.replace(pos, 3, "pcd"); // 双字符pcl::io::savePCDFile(pcd_file, *clud);}input.close();
阅读全文
0 0
- PCL PLY转PCD及批量处理
- pcl:三维模型obj格式转成pcl常用点云处理格式.pcd+matlab:.ply<->.pcd+其他.stl,.obj,.ply等三维格式互相转化方法
- pcl c++ 文件后缀名批处理修改 ply->pcd 走过的坑及问题
- PCL中将PCD文件转换成PLY文件
- 【PCL】将ply文件转换为pcd文件
- PCL中将PCD文件转换成PLY文件
- PCL读取PCD文件
- 66.[PCL]PCD文件格式
- PCL生成.PCD文件
- ply格式转换成点云pcd格式
- PCL中显示ply数据
- pcl点云PCD文件
- PCL点云库中如何读取指定的PCD文件,重新命名,处理后保存到指定文件夹
- 点云pcd格式转换成ply格式
- PCL--PCD(点云数据)文件格式
- PCL学习笔记(二)PCD文件格式
- PCL学习笔记(二)PCD文件格式
- PCL grabber for kinect & PCD write
- 用maven项目mybatis集成spring+springmvc无刷新实现crud
- 【Linux 环境Vim常用操作与配置文件】
- 如何编译动态库/静态库之编译Qt4.8.5静态库/动态库
- 庆祝61
- MySql通配符过滤,正则表达式过滤.
- PCL PLY转PCD及批量处理
- 区块链开发专题(数字货币自建P2POOL矿池详细教程)
- 关于搜索引擎使用的小技巧
- tf.nn.rnn_cell.GRUCell函数的使用
- FDA算法原理和python实现
- 简单工厂模式
- JNI开发
- JTextPane抓取网页
- mysql优化怎么做的?