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

这篇具有很好参考价值的文章主要介绍了C# 读取pcd、ply点云文件数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

Dll下载链接

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

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

具体使用方法

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

2. PointCloudXYZ cloudXYZ = new PointCloudXYZ();

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

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

测试效果

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

 测试代码文章来源地址https://www.toymoban.com/news/detail-663023.html

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点云文件数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 保存rosbag中的图像与点云数据,输出为png pcd mp4文件

    1.保存图像数据 使用  image_view image_saver 打开一个终端输入以下指令 rosrun image_view image_saver image:=/usb_cam/image_raw  _filename_format:= \\\"%04i.png\\\" _encoding:=bgr8 参数分别为:图像的topic、文件名( %04i 是指4位数的数字)、文件的编码  32FC1 和 bgr8 然后再起一个终端播放需要保持的图像数

    2024年01月17日
    浏览(35)
  • 使用python-open3d读取pcd,bin格式的点云,并显示

    open3d读取pcd格式点云 效果图    用open3d读取bin文件   效果图     

    2024年02月11日
    浏览(35)
  • Open3D——批量将KITTI数据集的.bin文件转换成.pcd点云格式

    Open3D——批量将KITTI数据集的.bin文件转换成.pcd点云格式 随着自动驾驶、智能制造等应用的逐渐推广,在处理三维点云数据方面的需求越来越大。而KITTI数据集是一个包含激光雷达、相机、GPS等多种传感器数据的三维视觉数据集,广泛用于计算机视觉领域的研究。 然而KITTI数据

    2024年01月16日
    浏览(28)
  • PCD点云文件外部框框坐标计算

    PCD点云文件直接提取的是点云的坐标,不是最外面的box的坐标,因此可以通过: 分别得到最大最小的xyz坐标,之后进行计算 点的序号和位置对应如下: 所有的代码如下,注意将pcd文件和代码置于同一文件夹中:

    2024年02月10日
    浏览(27)
  • open3d,读取stl/ply/obj/off/gltf/glb三维模型,并转换成点云,保存

    可以自己用建模软件建立一个模型 本案例使用模型的下载地址 可以从free3d免费下载,无需注册 效果: 效果: 均匀采样会在表面出现采样点聚集的现象,open3d实现了一种基于poisson_disk方法的采样,能实现表面的均匀采样 原理 :参数umber_of_points是最终采样的点数量,实际会先

    2024年02月11日
    浏览(37)
  • VScode连接远程JupyterNotebook显示点云ply文件

    1. remote ssh的配置文件config中添加 2. 在远程服务器的.sshd_config中把X11forward的开关打开为yes 3. 在home文件夹中更改.bashrc,加入以下内容 4. 运行以下命令,并检查echo的输出是否localhost:10.0 5. 在本地vscode中连接到刚刚创建的jupyter-server,测试是否能显示图像

    2024年02月10日
    浏览(24)
  • open3d操作.ply文件(点云)

    读取.ply文件

    2024年02月14日
    浏览(18)
  • 点云pcd转bin文件,已排坑,亲测有效!

    详见:https://github.com/Zhou-Renjie/pcd2bin 处理的主要问题(下面描述的所需安装和复制的文件均已上传知上诉链接): Possible error 1. Microsoft Visual C++ 9.0 is required The url http://aka.ms/vcpython27 is no longer valid. You can install vcForPYTHon27.msi directly. 2. failed with exit status 2 Put stdint.h into C:Users*

    2024年02月15日
    浏览(36)
  • Open3d读写ply点云文件

    本文为博主原创文章,未经博主允许不得转载。 本文为专栏《python三维点云从基础到深度学习》系列文章,地址为“https://blog.csdn.net/suiyingy/article/details/124017716”。         Open3d是由Intel发布的一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选

    2023年04月08日
    浏览(28)
  • ply文件格式介绍和读取

    PLY是一种三维mesh模型数据格式,全名为多边形档案(Polygon File Format)或 斯坦福三角形档案(Stanford Triangle Format)。 该格式主要用以储存立体扫描结果的三维数值,通过多边形片面的集合描述三维物体,与其他格式相较之下这是较为简单的方法。它可以储存的信息包含颜色、

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包