C#识别简单的验证码(中)

本文是《C#识别简单的验证码》系列的第二部分,主要讲解如何使用C#进行验证码的训练和样本库建立。通过获取图像、字符边缘检测、图像分割、字符扫描等步骤,详细阐述了识别过程的关键操作,并展示了样本库的结构和存储方式。
摘要由CSDN通过智能技术生成

在上一篇《C#识别简单的验证码(上)》中,我们给出了验证码识别的方法步骤。实际上是可以分为训练,建立样本库和识别两个部分,在本篇中将讲如何用C#实现训练和建立样本库。


回顾上一篇所讲的方法,训练和建立样本库可以由如下流程图来表示:


下面将就流程图中每一部分进行说明。


1. 获取图像:

图像有两种来源,一种是来源于本地文件。下面的代码将会打开一个对话框让用户选择含有验证码的图片,并且显示在PictureBox控件中

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog fileNames = new OpenFileDialog();
            fileNames.Filter = "All files (*.*)|*.*|JPG files (*.jpg)|*.jpg";
            fileNames.RestoreDirectory = true;
            if(fileNames.ShowDialog()==DialogResult.OK)
            {
                filePath = fileNames.FileName.ToString();
                fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
                pictureBox1.Image = Image.FromFile(filePath);
                               
                bmp = new Bitmap(Image.FromFile(filePath)) ;
            }
        }


还有一种是来源于网络,这里假设验证码的地址是http://www.xxx.com/aa.jpg,则可以用下面的代码来加载验证码。

WebBrowser web = new WebBrowser();
web.Navigate("https://www.xxx.com/aa.jpg");
web.Navigated += new WebBrowserNavigatedEventHandler(download_image);

 
        private void download_image(object sender, WebBrowserNavigatedEventArgs e)
        {
            //遍历寻找验证图像所在元素

            foreach (HtmlElement f in web.Document.Images)
            {

                if (f.GetAttribute("src").ToLower().EndsWith(".jpg"))
                {

                    //将元素绝对定位到页面左上角

                    f.Style = "position: absolute; z-index: 9999; top: 0px; left: 0px";

                    //抓图

                    var b = new Bitmap(f.ClientRectangle.Width, f.ClientRectangle.Height);

                    web.DrawToBitmap(b, new Rectangle(new Point(), f.ClientRectangle.Size));

                    pictureBox1.Image = b;

                    bmp = b;
                    break;
                }
            }
        }
 
2. 图像灰度化 

        /// <summary>
        /// 图像灰度化
        /// </summary>
     
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值