贵阳网站开发哪家便宜,it行业是什么工作 做什么的,图片设计制作软件,网站布局设计工具pcd文件有ascii 和二进制格式#xff0c;ascii可以直接记事本打开#xff0c;C#可以一行行读。但二进制格式的打开是乱码#xff0c;如果尝试程序中读取#xff0c;对比下看了数据也对不上。 这里可以使用pcl里的函数来读取pcd#xff0c;无论二进制或ascii都可以正确读取… pcd文件有ascii 和二进制格式ascii可以直接记事本打开C#可以一行行读。但二进制格式的打开是乱码如果尝试程序中读取对比下看了数据也对不上。 这里可以使用pcl里的函数来读取pcd无论二进制或ascii都可以正确读取但pcl是C写的不太方便使用。我写了个C#的dll文件Q_PclCs.dll此dll基于pcl 1.13.1版本开发可以通过引用此dll文件来读取pcd文件而不需要额外配置其他东西。 文件下载地址
链接https://pan.baidu.com/s/1dgXmd9VTf3G4ux__-fhtGg 提取码vx8u 使用说明 将这些dll文件都放到你程序的可执行文件目录下引用Q_PclCs.dll
读取方式
命名空间 Q_PclCs
using Q_PclCs;
PcdReader pcdReader new PcdReader();
先读点云长度length
int lengthpcdReader.GetLength(ofd.FileName);
准备数组存储 double[] x new double[length]; double[] y new double[length]; double[] znew double[length]; pcdReader.PcdReaderFast(ref x, ref y, ref z);
这样就读出来了
测试程序可以用vtk展示读出来的图简单展示下 测试代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Kitware.VTK;
using Q_PclCs;namespace testCsGetPcd
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd new OpenFileDialog();if(ofd.ShowDialog() DialogResult.OK){PcdReader pcdReader new PcdReader();int lengthpcdReader.GetLength(ofd.FileName);double[] x new double[length];double[] y new double[length];double[] znew double[length];pcdReader.PcdReaderFast(ref x, ref y, ref z);vtkPoints points new vtkPoints();for (int i 1; i length; i){points.InsertPoint(i, x[i], y[i], z[i]);}vtkPolyData polydata vtkPolyData.New();polydata.SetPoints(points);vtkVertexGlyphFilter glyphFilter vtkVertexGlyphFilter.New();glyphFilter.SetInputConnection(polydata.GetProducerPort());vtkPolyDataMapper mapper vtkPolyDataMapper.New();mapper.SetInputConnection(glyphFilter.GetOutputPort());vtkActor actor vtkActor.New();actor.SetMapper(mapper);vtkRenderer render renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();render.AddActor(actor);//render.AddActor(scalarBar);//render.SetViewport(0.0, 0.0, 1, 1);render.ResetCamera();this.Refresh();}}}
}