C#解析读取pcd文件

C#解析pcd文件内点云数据

前言

这一段时间做Benewake激光雷达的测试,涉及到对pcd点云文件数据的解析,在网络上找了一圈,就发现个pclsharp的,不知道是我配置错了还是系统的问题,调用一直报错,源代码也没编译成功,下了一个其他博主写的,发现只能解析ASCII格式的,二进制的解析出来数据都对不上,导致点的位置都不对,干脆自己编译C++的pcl点云库,自己做了一个动态编译库,供自己调用,但奈何C++基础不太扎实,C++动态链接库端应该有更好的解决方案的,但是自己写的这个还是能用,经过测试,解析ASCII格式和二进制格式的文件都能够解析出数据。

代码

**下载C++生成的动态链接库没有积分的可以发邮件給我,看到邮件我会回复的,我的邮箱:localstorage@qq.com

DLL为Release X64位下编译的,调用时请保持环境一致,或者兼容该环境
DLL为Release X64位下编译的,调用时请保持环境一致,或者兼容该环境
DLL为Release X64位下编译的,调用时请保持环境一致,或者兼容该环境


**

// 调用实例
/**
1.首先获取文件内点的数量(这点做的不太好)
2.创建数组,获取点云数据
**/
//C#调用C++,首先引入dll,注册字符集 

        //这个方法是获取点云数据,str传pcd文件的绝对路径,
        [DllImport("AddOperate.dll", EntryPoint = "loadPCDFile", CharSet = CharSet.Auto)]
        public static extern int loadPCDFile([MarshalAs(UnmanagedType.LPStr)] string str,float[] arr_X, float[] arr_Y, float[] arr_Z);
        //这个方法是获取点的数量,msg传pcd文件的绝对路径
        [DllImport("AddOperate.dll", EntryPoint = "Size", CharSet = CharSet.Auto)]
        public static extern int Size([MarshalAs(UnmanagedType.LPStr)] string msg);

        /// <summary>
        /// 解析*.pcd点云数据格式文件
        /// </summary>
        /// <param name="加载的PCD文件绝对路径"></param>
        public bool LoadFile(string strFile,ref float[] arr_X, ref float[] arr_Y, ref float[] arr_Z)
        {
           
            loadPCDFile(strFile,arr_X, arr_Y, arr_Z);
            return true;
        }
        /// <summary>
        /// h获取文件下点的数量
        /// </summary>
        /// <param name="strFile"></param>
        /// <returns></returns>
        public int PcdSize(string strFile)
        {
            int size = Size(strFile);
            return size;
        }

调用试列

 //pcd文件绝对路径
            string url = @"C:\Users\Administrator\Desktop\新建文件夹 (3)\13_48_15_213.pcd";
            pcdFile pcd = new pcdFile();

            //获取点的数量
            int size=pcd.PcdSize(url);
      

            Dictionary<string, float[]> dic = new Dictionary<string, float[]>();

            //创建存放X,Y,Z轴数据的数组
            float[] arr_X = new float[size];
            float[] arr_Y = new float[size];
            float[] arr_Z = new float[size];

           //调用解析方法
            pcd.LoadFile(url,ref arr_X,ref arr_Y,ref arr_Z);

            dic.Add("m_fX", arr_X);
            dic.Add("m_fY", arr_Y);
            dic.Add("m_fZ", arr_Z);

后言

没有积分的朋友可以发邮件给我,邮箱:localstorage@qq.com,其次,这个DLL我感觉做的并不是很好,但是数据能获取

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值