• 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;
  • 相关阅读:
    最长递增子序列问题---动态规划
    Shell中判断语句if中-z至-d的意思
    Linux中shell变量$0,$?等含义
    LeetCode之链表
    linux命令之crontab定时执行任务
    linux命令之scp远程文件复制
    Linux命令之sed批量替换字符串操作
    tomcat安装出现问题及解决方法
    LeetCode之二叉树作题java
    mysql导入导出、阿里云内网传输
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/15936167.html
Copyright © 2020-2023  润新知