[/code]

解决方案 »

  1.   

    首先,源码可以在这里下载,http://download.csdn.net/detail/koflfy/3932151早几天在论坛开了一贴,现在问题终于解决了,该程序对某个网站的验证码做识别,识别率百分之百,可以拿这个程序举一反三,现在还有很多网站都是用这种验证码的,包括我刚才上传资源的页面的CSDN的验证码都可以简单修改识别之,呵呵。。
    之前处理完验证码图片后,分割图片进行x,y取点阵,后来发现有几个字符点阵有重复,所以不能百分百识别,后来在一位朋友的提醒下对验证码再做y,x取点阵,终于能百分百识别了,在研究的过程中,也学会很多东西,现放出源码,同时感谢 Sandy945 大牛。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.IO;namespace 图片处理
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                textBox1.Text = "";
            }        private void button1_Click(object sender, EventArgs e)
            {
                textBox1.Text = "";
                GetImage();
                pictureBox1.Load(@"d:/getimage.jpg");
                SetImage();
            }        public void GetImage()
            {
                CookieContainer container = new CookieContainer();
                string url = "http://www.bitscn.com/include/vdimgck.php";
                byte[] bs = new byte[4096];
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.CookieContainer = container;
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream resStream = response.GetResponseStream();
                int len = resStream.Read(bs, 0, 4096);
                response.Cookies = container.GetCookies(request.RequestUri);
                resStream.Close();
                string path = @"d:/" + "getimage" + ".jpg";
                FileStream fs = File.Create(path);
                fs.Write(bs, 0, len);
                fs.Close();
            }        public void SetImage()
            {
                string path = @"d:/getImage.jpg";
                Bitmap bm = new Bitmap(path); // 得到位图对象
                int w = bm.Size.Width;
                int h = bm.Size.Height;
                Bitmap bm2 = new Bitmap(w, h);
                Color c = Color.Empty;
                for (int i = 0; i < w; i++)
                {
                    for (int j = 0; j < h; j++)
                    {
                        c = bm.GetPixel(i, j);
                        float b = c.GetBrightness();
                        if (b <= 0.5)
                        {
                            bm2.SetPixel(i, j, Color.Blue);
                        }
                    }
                }            ////处理第一列的蓝色的干扰点
                //for (int i = 0; i < w; i++)
                //{
                //    for (int j = 0; j < 1; j++)
                //    {
                //        bm2.SetPixel(i, j, Color.Black);
                //    }
                //}
                ////处理第一行的蓝色的干扰点
                //for (int i = 0; i < 1; i++)
                //{
                //    for (int j = 0; j < h; j++)
                //    {
                //        bm2.SetPixel(i, j, Color.Black);
                //    }
                //}            ////处理最后一列的蓝色的干扰点
                //for (int i = w - 1; i < w; i++)
                //{
                //    for (int j = 0; j < h; j++)
                //    {
                //        bm2.SetPixel(i, j, Color.Black);
                //    }
                //}
                ////处理最后一行的蓝色的干扰点
                //for (int i = h - 1; i < h; i++)
                //{
                //    for (int j = 0; j < w; j++)
                //    {
                //        bm2.SetPixel(j, i, Color.Black);
                //    }
                //}            bm2.Save(@"c:/black.jpg");
                //pictureBox2.Load(@"c:/black.jpg");            if (File.Exists(@"c:/black.jpg"))
                {
                    File.Copy(@"c:/black.jpg",@"d:/black.jpg",true);
                    File.Delete(@"c:/black.jpg");
                }
                Bitmap bm3 = new Bitmap(@"d:/black.jpg"); // 得到位图对象
                string a = bm3.GetPixel(10, 5).Name;
                w = bm3.Size.Width;
                h = bm3.Size.Height;
                int Column = 0;
                int[] temp = new int[12];
                int[] temp2 = new int[12];
                int[] temp3 = new int[12];
                int[] temp4 = new int[12];
                int[] Number1 = new int[12];
                int[] Number2 = new int[12];
                int[] Number3 = new int[12];
                int[] Number4 = new int[12];
                int[] SNumber = new int[8];
                int[] SNumber2 = new int[8];
                int[] SNumber3 = new int[8];
                int[] SNumber4 = new int[8];
                
      

  2.   

    晕,贴子太长,不小心剪切错了。
    //第一个验证码处理
                for (int i = 5; i < 17; i++)
                {
                    int Blue = 0;
                    for (int j = 6; j < 14; j++)
                    {
                        if (bm3.GetPixel(j, i).Name == "ff0000ff")
                        {
                            Blue++;
                        }
                    }                if (Blue > 0)
                    {
                        temp[Column] = Blue;
                        Column++;
                    }
                }            for (int i = 0; i < 12; i++)
                {
                    Number1[i] = temp[i];
                }            Column = 0;            for (int i = 6; i < 14; i++)
                {
                    int Blue = 0;
                    for (int j = 5; j < 17; j++)
                    {
                        if (bm3.GetPixel(i, j).Name == "ff0000ff")
                        {
                            Blue++;
                        }
                    }                if (Blue > 0)
                    {
                        temp[Column] = Blue;
                        Column++;
                    }
                }            for (int i = 0; i < 8; i++)
                {
                    SNumber[i] = temp[i];
                }            discern(Number1,SNumber);
                Column = 0;            //第二个验证码处理
                for (int i = 5; i < 17; i++)
                {
                    int Blue = 0;
                    for (int j = 16; j < 24; j++)
                    {
                        if (bm3.GetPixel(j, i).Name == "ff0000ff")
                        {
                            Blue++;
                        }
                    }                if (Blue > 0)
                    {
                        temp2[Column] = Blue;
                        Column++;
                    }
                }            for (int i = 0; i < 12; i++)
                {
                    Number2[i] = temp2[i];
                }            Column = 0;
                
                for (int i = 16; i < 24; i++)
                {
                    int Blue = 0;
                    for (int j = 5; j < 17; j++)
                    {
                        if (bm3.GetPixel(i, j).Name == "ff0000ff")
                        {
                            Blue++;
                        }
                    }                if (Blue > 0)
                    {
                        temp2[Column] = Blue;
                        Column++;
                    }
                }
                for (int i = 0; i < 8; i++)
                {
                    SNumber2[i] = temp2[i];
                }
                discern(Number2, SNumber2);
                Column = 0;            //第三个验证码处理
                for (int i = 5; i < 17; i++)
                {
                    int Blue = 0;
                    for (int j = 26; j < 34; j++)
                    {
                        if (bm3.GetPixel(j, i).Name == "ff0000ff")
                        {
                            Blue++;
                        }
                    }                if (Blue > 0)
                    {
                        temp3[Column] = Blue;
                        Column++;
                    }
                }            for (int i = 0; i < 12; i++)
                {
                    Number3[i] = temp3[i];
                }
                Column = 0;
                           for (int i = 26; i < 34; i++)
                {
                    int Blue = 0;
                    for (int j = 5; j < 17; j++)
                    {
                        if (bm3.GetPixel(i, j).Name == "ff0000ff")
                        {
                            Blue++;
                        }
                    }                if (Blue > 0)
                    {
                        temp3[Column] = Blue;
                        Column++;
                    }
                }
                for (int i = 0; i < 8; i++)
                {
                    SNumber3[i] = temp3[i];
                }
                discern(Number3, SNumber3);
                Column = 0;
                //第四个验证码处理
                for (int i = 5; i < 17; i++)
                {
                    int Blue = 0;
                    for (int j = 36; j < 44; j++)
                    {
                        if (bm3.GetPixel(j, i).Name == "ff0000ff")
                        {
                            Blue++;
                        }
                    }                if (Blue > 0)
                    {
                        temp4[Column] = Blue;
                        Column++;
                    }
                }
                for (int i = 0; i < 12; i++)
                {
                    Number4[i] = temp4[i];
                }
                Column = 0;
                            for (int i = 36; i < 44; i++)
                {
                    int Blue = 0;
                    for (int j = 5; j < 17; j++)
                    {
                        if (bm3.GetPixel(i, j).Name == "ff0000ff")
                        {
                            Blue++;
                        }
                    }                if (Blue > 0)
                    {
                        temp4[Column] = Blue;
                        Column++;
                    }
                }
                for (int i = 0; i < 8; i++)
                {
                    SNumber4[i] = temp4[i];
                }
                discern(Number4, SNumber4);
                Column = 0;            bm.Dispose();
                bm2.Dispose();
                bm3.Dispose();
            }       
      

  3.   

     public void discern(int[] dis,int[] Sdis)
            {
                StringBuilder res = new StringBuilder();
                StringBuilder Sres = new StringBuilder();
                for (int i = 0; i < dis.Length; i++)
                {
                    res.Append(dis[i].ToString());
                }            for (int i = 0; i < Sdis.Length; i++)
                {
                    Sres.Append(Sdis[i].ToString());
                }            if(res.ToString()=="822222222200"&&Sres.ToString()=="1111010111")
                {
                    textBox1.Text += "T";
                    
                }
                else
                {
                    if (res.ToString() == "444444444400" && Sres.ToString() == "1010244442")
                    {
                        textBox1.Text += "K";
                    }
                    else
                    {
                        if (res.ToString() == "444444444400" && Sres.ToString() == "89211298")
                        {
                            textBox1.Text += "U";
                        }
                        else
                        {
                            switch (res.ToString())
                            {
                                case "234222222600":
                                    textBox1.Text += "1";
                                    break;
                                case "444222222800":
                                    textBox1.Text += "2";
                                    break;
                                case "542232224500":
                                    textBox1.Text += "3";
                                    break;
                                case "234444822200":
                                    textBox1.Text += "4";
                                    break;
                                case "722552244400":
                                    textBox1.Text += "5";
                                    break;
                                case "443255444400":
                                    textBox1.Text += "6";
                                    break;
                                case "822222222200":
                                    textBox1.Text += "7";
                                    break;
                                case "444444444400":
                                    textBox1.Text += "8";
                                    break;
                                case "444455234400":
                                    textBox1.Text += "9";
                                    break;
                                case "244444844400":
                                    textBox1.Text += "A";
                                    break;
                                case "644464444600":
                                    textBox1.Text += "B";
                                    break;
                                case "543222234500":
                                    textBox1.Text += "C";
                                    break;
                                case "644444444600":
                                    textBox1.Text += "D";
                                    break;
                                case "722262222700":
                                    textBox1.Text += "E";
                                    break;
                                case "822262222200":
                                    textBox1.Text += "F";
                                    break;
                                case "542225444500":
                                    textBox1.Text += "G";
                                    break;
                                case "444484444400":
                                    textBox1.Text += "H";
                                    break;
                                case "622222222600":
                                    textBox1.Text += "I";
                                    break;
                                case "422222234300":
                                    textBox1.Text += "J";
                                    break;
                                //case "444444444400":
                                //    textBox1.Text += "K";
                                //    break;
                                case "222222222700":
                                    textBox1.Text += "L";
                                    break;
                                case "468666444400":
                                    textBox1.Text += "M";
                                    break;
                                case "456666655400":
                                    textBox1.Text += "N";
                                    break;
                                case "744472222200":
                                    textBox1.Text += "P";
                                    break;
                                case "444444664500":
                                    textBox1.Text += "Q";
                                    break;
                                case "744475444400":
                                    textBox1.Text += "R";
                                    break;
                                case "642262224600":
                                    textBox1.Text += "S";
                                    break;
                                //case "822222222200":
                                //    textBox1.Text += "T";
                                //    break;
                                //case "444444444400":
                                //    textBox1.Text += "U";
                                //    break;
                                case "444444442200":
                                    textBox1.Text += "V";
                                    break;
                                case "444466686400":
                                    textBox1.Text += "W";
                                    break;
                                case "444422444400":
                                    textBox1.Text += "X";
                                    break;
                                case "444422222200":
                                    textBox1.Text += "Y";
                                    break;
                                case "722222222700":
                                    textBox1.Text += "Z";
                                    break;
                                default:
                                    MessageBox.Show("验证码有异常,请重新获取");
                                    break;
                            }
                        }
                }
                }          
            }       
        }
    }
      

  4.   

     public void discern(int[] dis,int[] Sdis)
            {
                StringBuilder res = new StringBuilder();
                StringBuilder Sres = new StringBuilder();
                for (int i = 0; i < dis.Length; i++)
                {
                    res.Append(dis[i].ToString());
                }            for (int i = 0; i < Sdis.Length; i++)
                {
                    Sres.Append(Sdis[i].ToString());
                }            if(res.ToString()=="822222222200"&&Sres.ToString()=="1111010111")
                {
                    textBox1.Text += "T";
                    
                }
                else
                {
                    if (res.ToString() == "444444444400" && Sres.ToString() == "1010244442")
                    {
                        textBox1.Text += "K";
                    }
                    else
                    {
                        if (res.ToString() == "444444444400" && Sres.ToString() == "89211298")
                        {
                            textBox1.Text += "U";
                        }
                        else
                        {
                            switch (res.ToString())
                            {
                                case "234222222600":
                                    textBox1.Text += "1";
                                    break;
                                case "444222222800":
                                    textBox1.Text += "2";
                                    break;
                                case "542232224500":
                                    textBox1.Text += "3";
                                    break;
                                case "234444822200":
                                    textBox1.Text += "4";
                                    break;
                                case "722552244400":
                                    textBox1.Text += "5";
                                    break;
                                case "443255444400":
                                    textBox1.Text += "6";
                                    break;
                                case "822222222200":
                                    textBox1.Text += "7";
                                    break;
                                case "444444444400":
                                    textBox1.Text += "8";
                                    break;
                                case "444455234400":
                                    textBox1.Text += "9";
                                    break;
                                case "244444844400":
                                    textBox1.Text += "A";
                                    break;
                                case "644464444600":
                                    textBox1.Text += "B";
                                    break;
                                case "543222234500":
                                    textBox1.Text += "C";
                                    break;
                                case "644444444600":
                                    textBox1.Text += "D";
                                    break;
                                case "722262222700":
                                    textBox1.Text += "E";
                                    break;
                                case "822262222200":
                                    textBox1.Text += "F";
                                    break;
                                case "542225444500":
                                    textBox1.Text += "G";
                                    break;
                                case "444484444400":
                                    textBox1.Text += "H";
                                    break;
                                case "622222222600":
                                    textBox1.Text += "I";
                                    break;
                                case "422222234300":
                                    textBox1.Text += "J";
                                    break;
                                //case "444444444400":
                                //    textBox1.Text += "K";
                                //    break;
                                case "222222222700":
                                    textBox1.Text += "L";
                                    break;
                                case "468666444400":
                                    textBox1.Text += "M";
                                    break;
                                case "456666655400":
                                    textBox1.Text += "N";
                                    break;
                                case "744472222200":
                                    textBox1.Text += "P";
                                    break;
                                case "444444664500":
                                    textBox1.Text += "Q";
                                    break;
                                case "744475444400":
                                    textBox1.Text += "R";
                                    break;
                                case "642262224600":
                                    textBox1.Text += "S";
                                    break;
                                //case "822222222200":
                                //    textBox1.Text += "T";
                                //    break;
                                //case "444444444400":
                                //    textBox1.Text += "U";
                                //    break;
                                case "444444442200":
                                    textBox1.Text += "V";
                                    break;
                                case "444466686400":
                                    textBox1.Text += "W";
                                    break;
                                case "444422444400":
                                    textBox1.Text += "X";
                                    break;
                                case "444422222200":
                                    textBox1.Text += "Y";
                                    break;
                                case "722222222700":
                                    textBox1.Text += "Z";
                                    break;
                                default:
                                    MessageBox.Show("验证码有异常,请重新获取");
                                    break;
                            }
                        }
                }
                }          
            }       
        }
    }