当前位置: 首页 > news >正文

C# 读取pcd、ply点云文件数据

        最近研究了下用pcl读取点云数据,又做了个C#的dll,方便读取,同样这个dll基于pcl 最新版本1.13.1版本开发。

        上次做的需要先得到点云长度,再获取数据。这次这个定义了一个PointCloudXYZ类来存数据。将下面的dll拷贝到可执行目录下,引用Q_PclSharp.dll使用

Dll下载链接

链接:https://pan.baidu.com/s/1H7ig8YXJDTscprVDydjuJA 
提取码:6xha

具体使用方法

 1. 引用Q_PclSharp.dll 并使用命名空间 using Q_PclSharp;

2. PointCloudXYZ cloudXYZ = new PointCloudXYZ();

3.  IO.loadPlyFile(filePath, cloud.PointCloudXYZPointer);

装个VTK,把读到的数据显示出来

测试效果

 测试代码

using Kitware.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 Q_PclSharp;namespace TestCSdll
{public partial class Form1 : Form{PointCloudXYZ cloud = new PointCloudXYZ();public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog();if (ofd.ShowDialog() == DialogResult.OK){                               cloud.Clear();IO.loadPlyFile(ofd.FileName, cloud.PointCloudXYZPointer);vtkPoints points = vtkPoints.New();for (int i = 0; i < cloud.Size; i++){points.InsertNextPoint(cloud.GetX(i), cloud.GetY(i), cloud.GetZ(i));}vtkUnsignedCharArray colors_rgb = GetRGB(cloud);vtkPolyData polydata = vtkPolyData.New();polydata.SetPoints(points);polydata.GetPointData().SetScalars(colors_rgb);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();for (int i = 0; i < render.GetActors().GetNumberOfItems(); i++){var item = render.GetActors().GetItemAsObject(i);render.RemoveActor((vtkActor)item);item.Dispose();}render.AddActor(actor);render.ResetCamera();this.Refresh();}}vtkUnsignedCharArray GetRGB(PointCloudXYZ cloud){vtkUnsignedCharArray colors_rgb = vtkUnsignedCharArray.New();double[] minmax = new double[6];cloud.GetMinMaxXYZ(minmax);double z = minmax[5] - minmax[4];double z_median = z / 2;colors_rgb.SetNumberOfComponents(3);double r = 0, g = 0, b = 0;for (int i = 0; i < cloud.Size; i++){               if ((cloud.GetZ(i) - minmax[4]) > z_median){                   r = (255 * ((cloud.GetZ(i) - minmax[4] - z_median) / z_median)); ;g = (255 * (1 - ((cloud.GetZ(i) - minmax[4] - z_median) / z_median)));b = 0;colors_rgb.InsertNextTuple3(r, g, b);}else{r = 0;g = (255 * ((cloud.GetZ(i) - minmax[4]) / z_median));b = (255 * (1 - ((cloud.GetZ(i) - minmax[4]) / z_median)));colors_rgb.InsertNextTuple3(r, g, b);}}return colors_rgb;}}
}

http://www.lryc.cn/news/129961.html

相关文章:

  • LeetCode1387 将整数按权重排序
  • 正则表达式--Intellij IDEA常用的替换
  • 前端如何安全的渲染HTML字符串?
  • C++学习第十四天----for循环
  • 快速解决在进入浏览器时,明明连接了网络,但是显示你尚未连接,代理服务器可能有问题。
  • TypeScript入门指南
  • excel中定位条件,excel中有哪些数据类型、excel常见错误值、查找与替换
  • 19c_ogg搭建
  • 网络通信原理网络层TCP/IP协议(第四十三课)
  • yolov5封装进ros系统
  • Flowable 源码目录结构
  • 科大讯飞星火模型申请与chatgpt 3.5模型以及new bing的对比
  • 无涯教程-TensorFlow - 分布式计算
  • python+django+mysql项目实践五(信息搜索)
  • Python Opencv实践 - 图像透射变换
  • SpringBoot + Vue 微人事项目(第二天)
  • 【AIGC】 快速体验Stable Diffusion
  • Python入门【动态添加属性和方法、正则表达式概述、match函数的使用、常用匹配符、限定符 、限定符使用示例】(二十九)
  • 《Go 语言第一课》课程学习笔记(四)
  • 制定建立商务模式财务及企业管理信息系统的解决方案
  • UE Json Operate 解析嵌套数组
  • sd-webui安装comfyui扩展
  • Apache Doris 2.0.0 版本正式发布:盲测性能 10 倍提升,更统一多样的极速分析体验
  • LeetCode235. 二叉搜索树的最近公共祖先
  • 设计模式——建造者(Builder)模式
  • Java课题笔记~ SpringBoot概述
  • python优雅地爬虫!
  • UVM RAL后门访问配置
  • 数学建模之“灰色预测”模型
  • 深入探讨 Oxigen:Rust 实现的并行遗传算法框