pcl讀取pcd文件並顯示
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
int main(int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>("D:\\bun0.pcd", *cloud) == -1)
{
PCL_ERROR("Couldn't read file test_pcd.pcd \n");
return (-1);
}
pcl::visualization::CloudViewer viewer("Simple Cloud Viewer");
viewer.showCloud(cloud);
while (!viewer.wasStopped())
{
}
return (0);
}
kitti數據集bin轉pcd
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
#include <boost/random.hpp>
#include <fstream>
#include <string>
#include <vector>
#include <pcl/features/integral_image_normal.h>
#include <pcl/features/normal_3d.h>
using namespace std;
void bin2pcdR(const char *filenameInput, const char *filenameOutput) {
int32_t num = 1000000;
float *data = (float*)malloc(num * sizeof(float));
float *px = data + 0;
float *py = data + 1;
float *pz = data + 2;
float *pr = data + 3;
FILE *stream;
fopen_s(&stream, filenameInput, "rb");
num = fread(data, sizeof(float), num, stream) / 4;
fclose(stream);
FILE *writePCDStream;
fopen_s(&writePCDStream, filenameOutput, "wb");
fprintf(writePCDStream, "VERSION 0.7\n");
fprintf(writePCDStream, "FIELDS x y z intensity\n");
fprintf(writePCDStream, "SIZE 4 4 4 4\n");
fprintf(writePCDStream, "TYPE F F F F\n");
fprintf(writePCDStream, "WIDTH %d\n", num);
fprintf(writePCDStream, "HEIGHT 1\n");
fprintf(writePCDStream, "POINTS %d\n", num);
fprintf(writePCDStream, "DATA ascii\n");
for (int32_t i = 0; i < num; i++)
{
fprintf(writePCDStream, "%f %f %f %f\n", *px, *py, *pz, *pr);
px += 4; py += 4; pz += 4; pr += 4;
}
fclose(writePCDStream);
}
kitti數據集pcd轉bin
#include <omp.h>
#include <ctime>
#include <vector>
#include <string>
#include <algorithm>
#include <pcl/io/pcd_io.h>
#include <pcl/common/common_headers.h>
#include <sys/stat.h>
#include <pcl/io/boost.h>
#include <boost/program_options.hpp>
#include <fstream>
void convertPCDtoBin(std::string &in_file, std::string& out_file)
{
pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZI>);
if (pcl::io::loadPCDFile<pcl::PointXYZI>(in_file, *cloud) == -1)
{
std::string err = "Couldn't read file " + in_file;
PCL_ERROR(err.c_str());
return;
}
std::cout << "Loaded "
<< cloud->width * cloud->height
<< " data points from "
<< in_file
<< " with the following fields: "
<< std::endl;
std::ofstream myFile(out_file.c_str(), std::ios::out | std::ios::binary);
for (int j = 0; j < cloud->size(); j++) {
myFile.write((char*)& cloud->at(j).x, sizeof(cloud->at(j).x));
myFile.write((char*)& cloud->at(j).y, sizeof(cloud->at(j).y));
myFile.write((char*)& cloud->at(j).z, sizeof(cloud->at(j).z));
myFile.write((char *)& cloud->at(j).intensity, sizeof(cloud->at(j).intensity));
}
myFile.close();
}