C# AspriseOCR 验证码识别(第二讲)

时间:2022-12-14 08:45:07

我也是个小白,也是再摸索中,如果有高手的话请一定要教教我哈。写这个文章也是为了不让自己忘记。

C# AspriseOCR 验证码识别(第一讲)http://blog.csdn.net/arv002/article/details/54020654

一、一般来说验证码的图片都是来源于网络,所以我们先从网络中获取图片。

        public Image get_image(string url)
        {
            WebRequest webreq = WebRequest.Create(url); // url是网络图片的地址。。 
            WebResponse webres = webreq.GetResponse();
            Stream stream = webres.GetResponseStream();
            System.Drawing.Image image;
            image = System.Drawing.Image.FromStream(stream);
            stream.Close();
            return image;
        }

二、本地图片获取就很简单了。

Image mm = Image.FromFile("D:\\4.png");

三、去除掉相关颜色(比如背景中有一些固定背景干扰点,这个颜色需要人为的去获取,因为每个人遇到的验证码可能都不一样)颜色都是按照RGB来计算的。

将图片的每个像素点都遍历一次,将遇到的颜色设置为白色即可,这个是一个方法,具体的使用还是需要根据个人情况来定。

	Bitmap btp = new Bitmap(mm);
        Color c = new Color();
        int rr, gg, bb;
        for (int i = 0; i < btp.Width; i++)
            {
                for (int j = 0; j < btp.Height; j++)
                {
                    //取图片当前的像素点
                    c = btp.GetPixel(i, j);
                    rr = c.R; gg = c.G; bb = c.B;
                    //改变颜色
                    if (rr == 204 && gg == 255 && bb == 255)
                    {
                        //重新设置当前的像素点
                        btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
                    }
                    if (rr == 255 && gg == 213 && bb == 255)
                    {
                        //重新设置当前的像素点
                        btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
                    } if (rr == 204 && gg == 213 && bb == 255)
                    {
                        //重新设置当前的像素点
                        btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
                    }

                    if (rr == 255 && gg == 0 && bb == 0)
                    {
                        //重新设置当前的像素点
                        btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
                    }
                    if (rr == 153 && gg == 0 && bb == 51)
                    {
                        //重新设置当前的像素点
                        btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
                    }
                    if (rr == 0 && gg == 0 && bb == 0)
                    {
                        //重新设置当前的像素点
                        btp.SetPixel(i, j, Color.FromArgb(255, 255, 255, 255));
                    }
                }
            }

3.灰度设置(我看到灰度的计算算法和我参考的代码不一样,为什么要这么设置有懂的话可以告诉我一下哈)

RGB转灰度值参考 http://blog.csdn.net/cool1949/article/details/6649429

 Bitmap bmphd = btp;
            for (int i = 0; i < bmphd.Width; i++)
            {
                for (int j = 0; j < bmphd.Height; j++)
                {
                    //取图片当前的像素点
                    var color = bmphd.GetPixel(i, j);

                    var gray = (int)(color.R * 0.001 + color.G * 0.700 + color.B * 0.250);

                    //重新设置当前的像素点
                    bmphd.SetPixel(i, j, Color.FromArgb(gray, gray, gray));
                }
            }