C#解析读取pcd文件

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

    • 前言
    • 代码
    • 后言

前言

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

代码

**下载C++生成的动态链接库没有积分的可以发邮件給我,看到邮件我会回复的,我的邮箱:[email protected]

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);

        /// 
        /// 解析*.pcd点云数据格式文件
        /// 
        /// 
        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;
        }
        /// 
        /// h获取文件下点的数量
        /// 
        /// 
        /// 
        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);

后言

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

你可能感兴趣的:(C#,c#,c++,asp.net)