系列文章目录

事先准备
PCL环境配置、
PDAL环境配置

文章目录

  • 系列文章目录
    • 事先准备 [PCL环境配置](https://blog.csdn.net/Dbojuedzw/article/details/127165662?spm=1001.2014.3001.5502)、 [PDAL环境配置](https://blog.csdn.net/Dbojuedzw/article/details/126856880?spm=1001.2014.3001.5502)
  • 前言
  • 一、本博客包含哪些格式?
  • 二、转换代码
    • 1.ply2pcd
    • 2. stl2pcd
    • 3. xyz2pcd
    • 4. obj2pcd
    • 5. asc2pcd、txt2pcd
    • 6. las、laz2pcd
    • 7. bin2pcd
    • 完整的测试代码
  • 总结

前言

现有的点云格式繁杂多样,如stl、ply、obj、txt等都是常见的点云格式,这些不同类型的点云格式是在不同的时间阶段为了不同的目的而创建的,各有优点也均有不足,为了统一内部的点云格式,减少点云转换的额外花销,同时也为了解决现有文件结构不支持PCL中某些补充拓展的问题,PCL设计了内部独有的pcd文件格式,因此如果想利用PCL库,第一步就是需要将待研究的点云转换为pcd格式。


一、本博客包含哪些格式?

  • ply
  • stl
  • xyz
  • obj
  • asc、txt
  • las、laz
  • bin

二、转换代码

1.ply2pcd

代码如下:

void ply2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr & cloud)
{pcl::PLYReader reader;reader.read<PointT>(filename, *cloud);//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}
}

2. stl2pcd

void stl2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr& cloud)
{//读取STL格式模型vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();reader->SetFileName(filename.c_str());reader->Update();vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();polydata = reader->GetOutput();polydata->GetNumberOfPoints();//从poly转pcdpcl::io::vtkPolyDataToPointCloud(polydata, *cloud);//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}

3. xyz2pcd

代码如下(示例):

//导入文件
bool
loadCloud(const std::string& filename, pcl::PointCloud<PointT>& cloud)
{std::ifstream fs;fs.open(filename.c_str(), std::ios::binary);if (!fs.is_open() || fs.fail()){PCL_ERROR("Could not open file '%s'! Error : %s\n", filename.c_str(), strerror(errno));fs.close();return (false);}std::string line;std::vector<std::string> st;while (!fs.eof()){std::getline(fs, line);//忽略空行if (line.empty())continue;// 标记线boost::trim(line);boost::split(st, line, boost::is_any_of("\t\r "), boost::token_compress_on);if (st.size() != 3)continue;//将数据写入pcd文件cloud.push_back(PointT(float(atof(st[0].c_str())), float(atof(st[1].c_str())), float(atof(st[2].c_str()))));}fs.close();//设置pcd文件属性cloud.width = cloud.size(); cloud.height = 1; cloud.is_dense = true;return (true);
}
void xyz2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr& cloud)
{//读取xyz格式模型if (!loadCloud(filename, *cloud))cout << filename << "读取失败" << endl;//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}

4. obj2pcd

void obj2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr& cloud)
{//读取STL格式模型vtkSmartPointer<vtkPolyData> polydata;vtkSmartPointer<vtkOBJReader> reader = vtkSmartPointer<vtkOBJReader>::New();reader->SetFileName(filename.c_str());reader->Update();polydata = reader->GetOutput();pcl::io::vtkPolyDataToPointCloud(polydata, *cloud);//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}

5. asc2pcd、txt2pcd

struct tagPOINT_3D
{float x;float y;float z;float I;
};
void txt2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr& cloud)
{int number_Txt;string line;tagPOINT_3D TxtPoint;vector<tagPOINT_3D> m_vTxtPoints;//输入txt文件ifstream input(filename);//读取文件中的有效值while (getline(input, line)) {tagPOINT_3D TxtPoint;replace(line.begin(), line.end(), ',', ' ');//将逗号替换为空格istringstream record(line);record >> TxtPoint.x;record >> TxtPoint.y;record >> TxtPoint.z;//record >> TxtPoint.I;//先将数据写入m_vTxtPointsm_vTxtPoints.push_back(TxtPoint);}number_Txt = m_vTxtPoints.size();// 设置pcd文件属性cloud->width = number_Txt;cloud->height = 1;cloud->is_dense = false;cloud->points.resize(cloud->width * cloud->height);//将m_vTxtPoints数据写入pcd文件for (size_t i = 0; i < cloud->points.size(); ++i){cloud->points[i].x = m_vTxtPoints[i].x;cloud->points[i].y = m_vTxtPoints[i].y;cloud->points[i].z = m_vTxtPoints[i].z;//cloud->points[i].intensity = m_vTxtPoints[i].I;}//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}

6. las、laz2pcd

void las2pcd(const std::string filename, pcl::PointCloud<PointTI>::Ptr& cloud) {//中文可能会有乱码cout << "读取" << filename << "..." << endl;pdal::Option las_opt("filename", filename);pdal::Options las_opts;las_opts.add(las_opt);pdal::PointTable table;pdal::LasReader las_reader;las_reader.setOptions(las_opts);las_reader.prepare(table);pdal::PointViewSet point_view_set = las_reader.execute(table);pdal::PointViewPtr point_view = *point_view_set.begin();pdal::Dimension::IdList dims = point_view->dims();pdal::LasHeader las_header = las_reader.header();//头文件信息unsigned int PointCount = las_header.pointCount();double scale_x = las_header.scaleX();double scale_y = las_header.scaleY();double scale_z = las_header.scaleZ();double offset_x = las_header.offsetX();double offset_y = las_header.offsetY();double offset_z = las_header.offsetZ();//读点unsigned int n_features = las_header.pointCount();int count = 0;for (pdal::PointId id = 0; id < point_view->size(); ++id){double x = point_view->getFieldAs<double>(pdal::Dimension::Id::X, id);double y = point_view->getFieldAs<double>(pdal::Dimension::Id::Y, id);double z = point_view->getFieldAs<double>(pdal::Dimension::Id::Z, id);double intensity = point_view->getFieldAs<double>(pdal::Dimension::Id::Intensity, id);PointTI point(x, y, z, intensity);cloud->push_back(point);}//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}}

7. bin2pcd

void bin2pcd(std::string filename, pcl::PointCloud<PointTI>::Ptr& cloud)
{// load point cloudfstream input(filename.c_str(), ios::in | ios::binary);if (!input.good()) {cerr << "Could not read file: " << filename << endl;exit(EXIT_FAILURE);}input.seekg(0, ios::beg);//pcl::PointCloud<PointTI>::Ptr points(new pcl::PointCloud<PointXYZI>);int i;for (i = 0; input.good() && !input.eof(); i++) {pcl::PointXYZI point;input.read((char*)&point.x, 3 * sizeof(float));input.read((char*)&point.intensity, sizeof(float));cloud->push_back(point);}input.close();//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}

完整的测试代码

//#pragma execution_character_set("utf-8")//解决中文
#include <Winsock2.h>
#include <windows.h>
//pcd
#include <pcl/io/pcd_io.h>
//ply
#include <pcl/io/ply_io.h>
//stl
#include <pcl/io/vtk_lib_io.h>
//mesh
#include <vtkTriangleFilter.h>
#include <pcl/common/common.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pdal/PointTable.hpp>
#include <pdal/Options.hpp>
#include <pdal/io/LasHeader.hpp>
#include <pdal/io/LasReader.hpp>
#include <string>using namespace std;
typedef pcl::PointXYZ PointT;
typedef pcl::PointXYZI PointTI;void ply2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr & cloud)
{pcl::PLYReader reader;reader.read<PointT>(filename, *cloud);//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}void stl2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr& cloud)
{//读取STL格式模型vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();reader->SetFileName(filename.c_str());reader->Update();vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();polydata = reader->GetOutput();polydata->GetNumberOfPoints();//从poly转pcdpcl::io::vtkPolyDataToPointCloud(polydata, *cloud);//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}void obj2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr& cloud)
{//读取STL格式模型vtkSmartPointer<vtkPolyData> polydata;vtkSmartPointer<vtkOBJReader> reader = vtkSmartPointer<vtkOBJReader>::New();reader->SetFileName(filename.c_str());reader->Update();polydata = reader->GetOutput();pcl::io::vtkPolyDataToPointCloud(polydata, *cloud);//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}struct tagPOINT_3D
{float x;float y;float z;float I;
};
void txt2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr& cloud)
{int number_Txt;string line;tagPOINT_3D TxtPoint;vector<tagPOINT_3D> m_vTxtPoints;//输入txt文件ifstream input(filename);//读取文件中的有效值while (getline(input, line)) {tagPOINT_3D TxtPoint;replace(line.begin(), line.end(), ',', ' ');//将逗号替换为空格istringstream record(line);record >> TxtPoint.x;record >> TxtPoint.y;record >> TxtPoint.z;//record >> TxtPoint.I;//先将数据写入m_vTxtPointsm_vTxtPoints.push_back(TxtPoint);}number_Txt = m_vTxtPoints.size();// 设置pcd文件属性cloud->width = number_Txt;cloud->height = 1;cloud->is_dense = false;cloud->points.resize(cloud->width * cloud->height);//将m_vTxtPoints数据写入pcd文件for (size_t i = 0; i < cloud->points.size(); ++i){cloud->points[i].x = m_vTxtPoints[i].x;cloud->points[i].y = m_vTxtPoints[i].y;cloud->points[i].z = m_vTxtPoints[i].z;//cloud->points[i].intensity = m_vTxtPoints[i].I;}//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}//导入文件
bool
loadCloud(const std::string& filename, pcl::PointCloud<PointT>& cloud)
{std::ifstream fs;fs.open(filename.c_str(), std::ios::binary);if (!fs.is_open() || fs.fail()){PCL_ERROR("Could not open file '%s'! Error : %s\n", filename.c_str(), strerror(errno));fs.close();return (false);}std::string line;std::vector<std::string> st;while (!fs.eof()){std::getline(fs, line);//忽略空行if (line.empty())continue;// 标记线boost::trim(line);boost::split(st, line, boost::is_any_of("\t\r "), boost::token_compress_on);if (st.size() != 3)continue;//将数据写入pcd文件cloud.push_back(PointT(float(atof(st[0].c_str())), float(atof(st[1].c_str())), float(atof(st[2].c_str()))));}fs.close();//设置pcd文件属性cloud.width = cloud.size(); cloud.height = 1; cloud.is_dense = true;return (true);
}
void xyz2pcd(std::string filename, pcl::PointCloud<PointT>::Ptr& cloud)
{//读取xyz格式模型if (!loadCloud(filename, *cloud))cout << filename << "读取失败" << endl;//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}void bin2pcd(std::string filename, pcl::PointCloud<PointTI>::Ptr& cloud)
{// load point cloudfstream input(filename.c_str(), ios::in | ios::binary);if (!input.good()) {cerr << "Could not read file: " << filename << endl;exit(EXIT_FAILURE);}input.seekg(0, ios::beg);//pcl::PointCloud<PointTI>::Ptr points(new pcl::PointCloud<PointXYZI>);int i;for (i = 0; input.good() && !input.eof(); i++) {pcl::PointXYZI point;input.read((char*)&point.x, 3 * sizeof(float));input.read((char*)&point.intensity, sizeof(float));cloud->push_back(point);}input.close();//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}
}void las2pcd(const std::string filename, pcl::PointCloud<PointTI>::Ptr& cloud) {//中文可能会有乱码cout << "读取" << filename << "..." << endl;pdal::Option las_opt("filename", filename);pdal::Options las_opts;las_opts.add(las_opt);pdal::PointTable table;pdal::LasReader las_reader;las_reader.setOptions(las_opts);las_reader.prepare(table);pdal::PointViewSet point_view_set = las_reader.execute(table);pdal::PointViewPtr point_view = *point_view_set.begin();pdal::Dimension::IdList dims = point_view->dims();pdal::LasHeader las_header = las_reader.header();//头文件信息unsigned int PointCount = las_header.pointCount();double scale_x = las_header.scaleX();double scale_y = las_header.scaleY();double scale_z = las_header.scaleZ();double offset_x = las_header.offsetX();double offset_y = las_header.offsetY();double offset_z = las_header.offsetZ();//读点unsigned int n_features = las_header.pointCount();int count = 0;for (pdal::PointId id = 0; id < point_view->size(); ++id){double x = point_view->getFieldAs<double>(pdal::Dimension::Id::X, id);double y = point_view->getFieldAs<double>(pdal::Dimension::Id::Y, id);double z = point_view->getFieldAs<double>(pdal::Dimension::Id::Z, id);double intensity = point_view->getFieldAs<double>(pdal::Dimension::Id::Intensity, id);PointTI point(x, y, z, intensity);cloud->push_back(point);}//用对应的文件名保存pcd文件std::string pp = boost::filesystem::path(filename).filename().string();string name = pp.substr(0, pp.rfind("."));std::string pcdfilename = name.append(".pcd");cout << pcdfilename << endl;pcl::io::savePCDFileASCII(pcdfilename, *cloud);//依据需要选择保存的格式//pcl::io::savePCDFileBinary(pcdfilename, *cloud);     if (!cloud->empty()){cout << filename << "转换完成" << endl;}}int
main(int argc, char* argv[]) {pcl::PointCloud<pcl::PointXYZI>::Ptr lascloud(new pcl::PointCloud<pcl::PointXYZI>);pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);string file0 = "E:\\VS2019Projects\\PCL\\2pcd\\Data1\\bunny.ply"; //ply2pcd(file0, cloud);string file1 = "E:\\VS2019Projects\\PCL\\2pcd\\Data1\\AfricanAnimals.stl";//stl2pcd(file1, cloud);string file2 = "E:\\VS2019Projects\\PCL\\2pcd\\Data1\\mode.obj";//obj2pcd(file2, cloud);string file3 = "E:\\VS2019Projects\\PCL\\2pcd\\Data1\\dragon.txt";//txt2pcd(file3, cloud);string file4 = "E:\\VS2019Projects\\PCL\\2pcd\\Data1\\目标1.asc";//txt2pcd(file4, cloud);string file5 = "E:\\VS2019Projects\\PCL\\2pcd\\Data1\\crystal_4000.xyz";//xyz2pcd(file5, cloud);string file6 = "E:\\VS2019Projects\\PCL\\2pcd\\data\\000000.bin";bin2pcd(file6, lascloud);//las2pcd(file, lascloud, true);//--------------------------------------可视化--------------------------pcl::visualization::PCLVisualizer viewer;viewer.addPointCloud<PointT>(cloud, "cloud");viewer.addCoordinateSystem();while (!viewer.wasStopped()){viewer.spinOnce(100);}//清空内存cloud->points.clear();
}

总结

多种常见三维格式数据转成pcd文件,除了las和bin格式的测试文件包含强度信息外,其余测试文件值包含xyz三维数据,如果包含RGB或强度信息,只需要在对应部分进行简单修改,在此不予赘述。
此外,如果有其他格式转换需求也可以在评论区提出来,有时间我将进行补充~

PCL 各种三维格式转PCD文件(ply、stl、xyz、obj、asc、txt、las、laz、bin)相关推荐

  1. pcl加载并显示pcd、ply点云数据文件

    pcl加载显示pcd,代码如下: #include<iostream> #include<pcl/io/pcd_io.h> #include<pcl/point_type ...

  2. 关于asc、txt格式到pcd、ply格式数据转换

    1 asc数据说明 许多点云数据是asc或txt数据格式,asc(ascii)即文本文件,数据已可视化的文本存储.在点云数据处理时,常面临数据格式转换问题,比如说需要转换成pcd或ply数据格式. 2 ...

  3. PCL点云CSV转PCD文件

    点云文件转换代码 注意:CSV文件格式也不同,本文所述的CSV文件时用基恩士线激光传感器得到的. 具体格式为,这样式的 表格中行表示X轴向的点,列表示Y,而表格中的数值表示Z轴深度. X与Y的间距是由 ...

  4. Matlab 读取 pcd 文件转ply并显示

    1.MATLAB读取pcd文件 % 读取 pcd 文件,并取出 xyz 坐标 ptCloud = pcread('table.pcd'); % 可视化显示当前 pcd 文件 pcshow(ptClou ...

  5. 三维目标检测:(一)制作自己的ModelNet数据集(1.读取pcd文件为numpy数组)

    Python读取pcd文件为numpy数组 pcd文件的格式 读取pcd文件存储到numpy数组中 补充 pcd文件的格式 1.第二行:每行数据的内容 可能是(X Y Z R G B)或者(X Y Z ...

  6. 如何将自己采集到的点云数据转换为与Kitti数据集相同的格式?(.pcd文件转换为.bin文件)

    Autonomous vehicle 杂谈_14 一. pcd文件要求: 要求.pcd文件不光只有x,y,z的坐标数据,同时也需要有indensity属性. 一. 功能包配置 pip install ...

  7. 点云txt文件—pcd文件

    转自:http://blog.csdn.net/u013832676/article/details/44186699 这个现在看来,可能是觉得走了弯路了.因为我们是可以直接将点云数据保存在pcd文件 ...

  8. 将KITTI数据集中的点云集由.bin文件转换为ubuntu PCL可以识别的PCD文件。

    将KITTI数据集中.bin文件通过Matlab生成.pcd文件,解决由Matlab生成的.pcd文件无法在pcl正常显示的问题. 初学点云处理是用PCL入门的,以至于现在对任何点云的处理都想在PCL ...

  9. .pcd文件转换为.ply文件

    准备工作:在vs2015配置pcl,在属性管理器添加属性表. 在解决方案中添加pcd_ply.cpp文件 在所见文档中添加.pcd文件 打开pcd_ply.cpp的代码,进行修改: 第27行修改自己的 ...

  10. ubuntu 下stl obj ply 3dx fbx等各种格式转pcd方法

    python下也可以以下步骤: 首先下载blender 启动后工具栏--文件,中引入文件,支持各种格式 然后导出为obj格式 obj格式转pcd用github上得obj2pcd这个 https://g ...

最新文章

  1. django celery
  2. 5.Verilog的阻塞赋值=和非阻塞赋值<=
  3. OpenCV数据类型转换:cnvertTo函数的使用
  4. java.lang.IllegalArgumentException: requirement failed: No output operations registered, so nothing
  5. 【Ubuntu-opencv3.4.0-Error】对‘cv::Mat::updateContinuityFlag()’未定义的引用
  6. idle不是python自带的开发工具_Python的开发工具
  7. java中intvalue_Java Float类intValue()方法与示例
  8. 帆软实现单元格可编辑内容并保存
  9. 元素显示模式转换(HTML、CSS)
  10. Xshell/Xftp个人完全免费版
  11. CATIA2018客户端安装错误之提示Runtime VC14 x86失败,返回代码3
  12. 未经许可,请勿擅自引用本博客内的原创作品
  13. 使用Elcomsoft Advanced Office Password Recovery对Office文档进行密码恢复
  14. 计算机英特尔显卡在哪找,英特尔®显卡和 Windows 7 * 常见问题解答
  15. 如何修改 / 校正Linux系统时间
  16. Spider_Man_5.2 の Mongodb_使用
  17. 从faker.js 开源作者Marak已删除了GIthub所有代码我们得到了什么教训
  18. apache commons fileupload 团队
  19. 数学脱式计算在线计算机,三年级数学脱式计算.doc
  20. 笔记本电脑触控板操作小结

热门文章

  1. star cd linux,比对软件STAR【更新】
  2. 北京退休41年工龄,退休工资7200多么?
  3. 大数据分析语言Python的价值和意义
  4. 不用找,你想要的工业风家装su模型素材都在这里
  5. python自然语言情感_Python 识别文本情感就这么简单
  6. Codeforces Round #404 (Div. 2)——ABCDE
  7. 2021华南师范大学C++程序设计(918)硕士研究生考试试题 以及 详细答案解析
  8. 算法竞赛入门经典 习题5-16
  9. 石油大--2020年秋季组队训练赛第十三场----G、Insertion Order(构造)
  10. 对于网络数据拉取和推送方式优劣分析