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;}}
}
相关文章:
C# 读取pcd、ply点云文件数据
最近研究了下用pcl读取点云数据,又做了个C#的dll,方便读取,同样这个dll基于pcl 最新版本1.13.1版本开发。 上次做的需要先得到点云长度,再获取数据。这次这个定义了一个PointCloudXYZ类来存数据。将下面的dll拷贝到可执行目录下&a…...
LeetCode1387 将整数按权重排序
思路 首先是这种计算权重的方式很有可能出现重复,所以需要记忆化搜索记忆化搜索:先查表再计算,先存表再返回。将整数 x 和计算的权重分别存储数组的0和1的位置重写compare将数组排序按规则排序返回结果 代码 class Solution {private Hash…...
正则表达式--Intellij IDEA常用的替换
原文网址:正则表达式--Intellij IDEA常用的替换_IT利刃出鞘的博客-CSDN博客 简介 本文介绍IDEA使用正则表达式进行替换时的常用的一些示例。 根据注释加注解 需求 将 /*** abc*/ 改为: /*** abc*/ ApiModelOperation("abc") 方法 选…...
前端如何安全的渲染HTML字符串?
在现代的Web 应用中,动态生成和渲染 HTML 字符串是很常见的需求。然而,不正确地渲染HTML字符串可能会导致安全漏洞,例如跨站脚本攻击(XSS)。为了确保应用的安全性,我们需要采取一些措施来在安全的环境下渲染…...
C++学习第十四天----for循环
1.递增/递减运算符和指针 将*和同时用于指针的优先级? 答:前缀递增,前缀递减和解除引用运算符的优先级相同,以从右到左的方式进行结合;后缀递增和后缀递减的优先级相同,但比前缀运算符的优先级高࿰…...
快速解决在进入浏览器时,明明连接了网络,但是显示你尚未连接,代理服务器可能有问题。
在进入浏览器时,明明连接了网络,但是显示你尚未连接,代理服务器可能有问题,如下图。 一般情况下,可能是因为你使用了某些VPN,然后VPN使用时修改了你的网络设置,我们可以通过以下方法快速解决。 …...
TypeScript入门指南
TypeScript学习总结内容目录: TypeScript概述 TypeScript特性。Javascript与TypeScript的区别 * TypeScript安装及其环境搭建TypeScript类型声明 * 单个类型声明,多个类型声明 * 任意类型声明 * 函数类型声明 * unknown类型…...
excel中定位条件,excel中有哪些数据类型、excel常见错误值、查找与替换
一、如何定位条件 操作步骤:开始 - 查找和选择 - 定位条件(ctrl G 或 F5) 注:如果F5不可用,可能是这个快捷键被占用了 案例:使用定位条件选择取余中空单元格,填入100,按组合键ct…...
19c_ogg搭建
1.环境介绍 源端:192.168.56.101 目标端:192.168.56.100 背景:数据从主库cdb主机定位,同步到从库 2.配置ogg 2.1 开启归档、强制日志、补充日志 --ogg 主备都需要配置 SQL> alter database archivelog; SQL> alter databa…...
网络通信原理网络层TCP/IP协议(第四十三课)
1.什么是TCP/IP 目前应用广泛的网络通信协议集 国际互联网上电脑相互通信的规则、约定。 2.主机通信的三要素 IP地址:用来标识一个节点的网络地址(区分网络中电脑身份的地址,如人有名字) 子网掩码:配合IP地址确定网络号 IP路由:网关的地址,网络的出口 3.IP地址 …...
yolov5封装进ros系统
一,要具备ROS环境 ROS环境搭建可以参考我之前的文章 ROS参考文章1 ROS参考文章2 建立ROS工作空间 ROS系统由自己的编译空间规则。 cd 你自己想要的文件夹(我一般是home目录) mkdir -p (你自己的文件夹名字,比如我是yolov5…...
Flowable 源码目录结构
title: Flowable 源码目录结构 date: 2023-8-17 23:47:20 tags: - Flowable 下载源码 下载地址:flowable/flowable-engine at flowable-6.7.2 (github.com) Git 下载方式:git clone gitgithub.com:flowable/flowable-engine.git 切换分支 git checkout -…...
科大讯飞星火模型申请与chatgpt 3.5模型以及new bing的对比
科大讯飞星火模型 申请科大讯飞星火认知大模型账号科大讯飞星火认知大模型使用1.界面介绍2. 在编程能力上与chatgpt 3.5对比科大讯飞星火模型chatgpt 3.5模型 3. 在图片生成能力上与new bing对比 总结 申请科大讯飞星火认知大模型账号 注册网址: 科大讯飞星火认知大…...
无涯教程-TensorFlow - 分布式计算
本章将重点介绍如何开始使用分布式TensorFlow,目的是帮助开发人员了解重复出现的基本分布式TF概念,如TF服务器。无涯教程将使用Jupyter Notebook分布式TensorFlow。 第1步 - 导入分布式计算必需的必要模块- import tensorflow as tf 第2步 - …...
python+django+mysql项目实践五(信息搜索)
python项目实践 环境说明: Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 信息搜素 输入内容进行搜索,内容有文本类和时间类 文本类需要模糊搜索,包含即检索 时间类需要选取时间范围内的内容 views 利用Q完成对指定内容的检索 检索后按检索内容更新…...
Python Opencv实践 - 图像透射变换
import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols img.shape[:2] print(rows,cols)#opencv中的透射变换,需要一个3x3透射变换矩阵 #这个矩阵可以通过…...
SpringBoot + Vue 微人事项目(第二天)
昨天做了微人事登录的前端页面和后端接口,实现了前后端接口的对接,输入正确的用户名和密码之后,成功的跳转到home页。现在要做的就是Home页的Title制作 Home页的title制作 使用Element UI中的Container布局容器 复制的代码如下,…...
【AIGC】 快速体验Stable Diffusion
快速体验Stable Diffusion 引言一、安装二、简单使用2.1 一句话文生图2.2 详细文生图 三、进阶使用 引言 stable Diffusion是一款高性能的AI绘画生成工具,相比之前的AI绘画工具,它生成的图像质量更高、运行速度更快,是AI图像生成领域的里程碑…...
Python入门【动态添加属性和方法、正则表达式概述、match函数的使用、常用匹配符、限定符 、限定符使用示例】(二十九)
👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…...
《Go 语言第一课》课程学习笔记(四)
构建模式:Go Module 的 6 类常规操作 为当前 module 添加一个依赖 我们如何为一个 Go Module 添加一个新的依赖包呢? 如果我们要为项目增加一个新依赖:github.com/google/uuid,我们首先会更新源码:package mainimpor…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
