• C# 根据波形图片,提取测试数据点 Winform


    0
    其主要思路就是提取图片每个1px宽度上面的像素点,每个宽度只提取一个,并用Point记录这个像素点的 x和y。这样做的前提是图片除了波形有明显颜色以外,其他地方的像素点都能被排除,最方便的就是把排除区域变透明。但在这里我遇到了个问题,明明图片看着透明了,但其实Color的透明度不一定是0,就无排除无效的点,反而是把这种透明点算成波形上的点了,最后提取出来的波形就是错误的。
    对于图片的透明操作,我是在这个网站做的:稿定。https://www.uupoop.com/#/,专业版导图什么的也不收费,只需要注册就行。
    具体操作也简单:
    颜色不杂的图片可以用矩形工具填充白色把杂色遮住。
    然后
    滤镜 锐化 可以加深保留的颜色这步可以省略。
    最后
    其他 ColorToAlpha,把图片变为透明图片。
    我一个不会ps的,自己摸索一阵子,就能成。
    然后获取图片像素的方法:
    public static void GetImagePixelV3(Bitmap img, ref Dictionary<Point, Color> dicsMax)
            {
                for (int i = 0; i < img.Width; i++)
                {
                    for (int j = 0; j < img.Height; j++)
                    {
    
                        var color = img.GetPixel(i, j);
                        
                        if (color.A == 0 && color.B == 0 && color.G == 0 && color.R == 0)
                        {
                            continue;
                        }
                       
                        else
                        {
                            if (color.A <128)//透明度
                            {
                                continue;
                            }
    
                            var pt = new Point(i, j);
                            
                            dicsMax[pt] = color;
                            break;
                        }
    
                    }
                }
                
            }
    

      

    画图:就GD+
    var map = new Bitmap(ImgWidth, ImgHeight);
                var g = Graphics.FromImage(map);
                 for (int i = 0; i < DicsTop.Count; i++)
                {
    
                    var pt2 = DicsTop.ElementAt(i).Key;
                    points.Add(pt2);
                }
                points.Sort((x1, x2) =>
                {
                    return x1.X - x2.X;
                });
    
                for (int i = 1; i < points.Count; i++)
                {
                    var pt1 = points[i - 1];
                    var pt2 = points[i];
                    g.DrawLine(Pens.Blue, pt1, pt2);
                }
                g.Dispose();
                picDraw1.BackgroundImage = map;
  • 相关阅读:
    数据结构学习之前言,为年后换新工作做准备
    马云不想成为“马云”
    2014找工作总结-机会往往留给有准备的人
    数据分析≠Hadoop+NoSQL,不妨先看完善现有技术的10条捷径
    做个犀利的码农:如何持续培养/更新自己的开发技能
    Google七夕情人节Doodle背后技术揭秘
    把帖子用循环显示出来
    php验证登录
    用户注册
    form 表单用php来跳转页面
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/15936167.html
Copyright © 2020-2023  润新知