前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【点云学习】软件制作2 点云转2D

【点云学习】软件制作2 点云转2D

作者头像
EdenChen
发布2020-03-31 12:04:08
7670
发布2020-03-31 12:04:08
举报
文章被收录于专栏:ROBOTEDUROBOTEDU

导览

利用C#写一个简单点云软件2

  1. 如何处理颜色
  2. 如何将点云转为颜色

01

颜色

RGB

常用的一种颜色格式,RGB分别代表红,绿和蓝。RGB值的变化代表了颜色的变化。

HSV

常用的另一种颜色格式,HSV分别代表色调,饱和度和亮度。

RGB和HSV的区别

RGB和HSV都可以用来表示不同颜色,并且相互转换。HSV中可以用一个H值变化用以切换不同颜色,但是在RGB中必须三个值变化才能切换颜色。颜色更多信息请搜索RGB和HSV。

从颜色到点云

我们可以把距离范围映射到颜色范围上(RGB→Distance),用C#制作一个函数来表达这种关系。刚刚说过,HSV的颜色格式可以用一个H值来代表整个颜色区域值,所以用HSV是比较简单。

02

C# 代码

色调函数HSV

代码语言:javascript
复制
        private Color Color_HSV(double measurevalue, double max_value, double min_value)
        {
            Color color_rpg = Color.FromArgb(0, 0, 0);
            measurevalue = measurevalue - min_value;
            max_value = max_value - min_value;
            ColorHSV hSV = new ColorHSV((int)((measurevalue/max_value)*360), 200, 200);
            color_rpg= ColorHelper.HsvToRgb(hSV).GetColor();
            return color_rpg;
        }

这里我用了一个网上的颜色类,因为本身C#是没有HSV这个颜色类以及相关函数的。可以自行网上搜或者等待我放出源工程。

色调函数RGB

代码语言:javascript
复制
        private Color ColorRGB(double measurevalue, double max_value, double min_value)
        {
            int color;
            Color color_rpg = Color.FromArgb(0, 0, 0);
            measurevalue = measurevalue - min_value;
            max_value = max_value - min_value;
            if (measurevalue / max_value <= 0.15)
            {
                color = (int)((measurevalue / max_value) / 0.15 * 255);
                if (color <= 0)
                {
                    color = 0;
                }
                color_rpg = Color.FromArgb(0, 0, color);
                return color_rpg;
            }
            //...
            return color_rpg;
        }

Bitmap相关

代码语言:javascript
复制
        private void aSCToolStripMenuItem_Click(object sender, EventArgs e)
        {
            bitmap = new Bitmap(FileOpt.datamat.GetLength(0), FileOpt.datamat.GetLength(1));
            for (int y = 0; y < FileOpt.datamat.GetLength(1); y++)
            {
                for (int x = 0; x < FileOpt.datamat.GetLength(0); x++)
                {
                    bitmap.SetPixel(x, y, Color_HSV(FileOpt.datamat[x, y], FileOpt.maxv, 0));
                }
            }
            pictureBox1.Image = bitmap;
            FileOpt.datamat_buffer = FileOpt.datamat;
        }

效果图

3D演示

小结

1. HSV与RBG都可以显示,效果略有不同,实际操作可以进行优化

2. 显示图片

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

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

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

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

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