前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【简单的点云】1.1 C#制作一个读取点云的软件1

【简单的点云】1.1 C#制作一个读取点云的软件1

作者头像
EdenChen
发布2020-03-31 12:03:35
1.8K0
发布2020-03-31 12:03:35
举报
文章被收录于专栏:ROBOTEDUROBOTEDUROBOTEDU

导览

利用C#写一个简单的点云读取软件

  1. Asc文件
  2. 读取保存

01

.asc的格式

ASC文件主要分为注释+数据两个部分

其中注释部分,一行代表一个信息比如XY点数,点云XY物理长度等;

数据部分:所有数据之间没有换行,点与点之间用“\t”分隔。

ASC点云以第一行第一列为开始点(0位),从左往右写入,写到第一行最后一列时,换行,从第二行第一列开始继续写入,以此往复,直到最后一行最后一列点。

02

C# 代码

打开文件

            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Title = "选择你的点云文件";
            openFileDialog.RestoreDirectory = true;
                openFileDialog.ShowDialog();
                if (openFileDialog.FileName != null)
                {
                    string pathfile_pointcloud = openFileDialog.FileName;
                }

利用OpenFileDIog类来获得需要读取的点云路径

读取注释行和数据

                    StreamReader reader = new StreamReader(pathfile_pointcloud);
                    string[] pointcloud_file = reader.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.None);
                    string[] data_1 = pointcloud_file[12].Split(new string[] { "\t" }, StringSplitOptions.None);
                    if (pointcloud_file[11] == "# Start of Data:")
                    {
                        int x_pitch = int.Parse(pointcloud_file[2].Split('=')[1]);
                        Matsize.Width = x_pitch;
                        int y_pitch = int.Parse(pointcloud_file[3].Split('=')[1]);
                        Matsize.Height = y_pitch;
                        float pitch_x = float.Parse(pointcloud_file[4].Split('=')[1]) / x_pitch;
                        float pitch_y = float.Parse(pointcloud_file[5].Split('=')[1]) / y_pitch;
                     }

读取注释行中的重要信息和分割数据点云

将点云存入一个二维数组

                        datamat = new double[x_pitch, y_pitch];
                        for (int y = 0; y < y_pitch; y++)
                        {
                            for (int x = 0; x < x_pitch; x++)
                            {
                                datamat[x, y] = double.Parse(data_1[y * x_pitch + x]);
                                if (datamat[x, y] > maxv) { maxv = datamat[x, y]; }
                            }
                        }

点云保存为一个Double二维数据

保存同理,可视作读取的逆过程。

小结

1. ASC文件介绍

2. 读入和保存

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ROBOTEDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档