欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

一個驗證碼識別的代碼

系統 2153 0

字體固定,位置固定,干擾點和字體顏色深度沒有交叉,比如下面的樣例,是我前幾天幫朋友寫投票機刷票時碰到的一個具體案例。

基本就三步,確定特征碼-分割圖片-逐個匹配,代碼很簡單,不超過100行

    using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

namespace BmpNumber

{

    class Number

    {

        //數字特征庫

       static int[,] _num0 = new int[7, 10] { { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 

                                        { 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 }, { 1, 1, 0, 0, 0, 0, 0, 0, 1, 1 }, 

                                        { 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 } };

        static int[,] _num1 = new int[7, 10] { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, 

                                        { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, 

                                        { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

        static int[,] _num2 = new int[7, 10] { { 0, 0, 1, 1, 0, 0, 0, 0, 1, 1 }, { 0, 1, 1, 1, 0, 0, 0, 1, 1, 1 }, 

                                        { 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 }, { 1, 1, 0, 0, 0, 1, 1, 0, 1, 1 }, 

                                        { 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, { 1, 1, 1, 1, 1, 0, 0, 0, 1, 1 }, { 0, 1, 1, 1, 0, 0, 0, 0, 1, 1 } };

        static int[,] _num3 = new int[7, 10] { { 0, 0, 1, 0, 0, 0, 1, 1, 0, 0 }, { 0, 1, 1, 0, 0, 0, 1, 1, 1, 0 }, 

                                        { 1, 1, 0, 0, 0, 0, 0, 1, 1, 1 }, { 1, 1, 0, 0, 1, 0, 0, 0, 1, 1 }, 

                                        { 1, 1, 0, 0, 1, 0, 0, 0, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, { 0, 1, 1, 1, 0, 1, 1, 1, 0, 0 } };

        static int[,] _num4 = new int[7, 10] { { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0 }, 

                                        { 0, 0, 1, 1, 1, 0, 1, 1, 0, 0 }, { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0 }, 

                                        { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 } };

        static int[,] _num5 = new int[7, 10] { { 0, 0, 0, 1, 1, 1, 0, 1, 1, 0 }, { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1 }, 

                                        { 1, 1, 1, 1, 1, 0, 0, 0, 1, 1 }, { 1, 1, 0, 1, 1, 0, 0, 0, 1, 1 },

                                        { 1, 1, 0, 1, 1, 0, 0, 0, 1, 1 }, { 1, 1, 0, 1, 1, 1, 1, 1, 1, 0 }, { 1, 1, 0, 0, 0, 1, 1, 1, 0, 0 } };

        static int[,] _num6 = new int[7, 10] { { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, 

                                        { 1, 1, 1, 0, 1, 1, 0, 0, 1, 1 }, { 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, 

                                        { 1, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 }, { 0, 1, 1, 0, 0, 1, 1, 1, 1, 0 } };

        static int[,] _num7 = new int[7, 10] { { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, 

                                        { 1, 1, 0, 0, 0, 0, 0, 1, 1, 1 }, { 1, 1, 0, 0, 1, 1, 1, 1, 1, 1 }, 

                                        { 1, 1, 0, 1, 1, 1, 0, 0, 0, 0 }, { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 } };

        static int[,] _num8 = new int[7, 10] { { 0, 1, 1, 1, 0, 0, 1, 1, 1, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, 

                                        { 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, { 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, 

                                        { 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 1, 1, 1, 0, 0, 1, 1, 1, 0 } };

        static int[,] _num9 = new int[7, 10] { { 0, 1, 1, 1, 1, 0, 0, 1, 1, 0 }, { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1 }, 

                                        { 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, { 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, 

                                        { 1, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0 } };



        static private int[,] getNum(Bitmap bmp, int index)

        {

            //分割圖片

            int[,] _num = new int[7, 10];

            for (int i = index * 10 + 2; i < index * 10 + 9; i++)

            {

                for (int j = 6; j < 16; j++)

                {

                    Color c = bmp.GetPixel(i, j);

                    if (c.R < 100)

                    {

                        _num[i - 2 - index * 10, j - 6] = 1;

                    }

                }

            }

            return _num;

        }



        static private int CheckNumber(int[,] number)

        {

            if (CheckNumber(_num0, number) == true) return 0;

            if (CheckNumber(_num1, number) == true) return 1;

            if (CheckNumber(_num2, number) == true) return 2;

            if (CheckNumber(_num3, number) == true) return 3;

            if (CheckNumber(_num4, number) == true) return 4;

            if (CheckNumber(_num5, number) == true) return 5;

            if (CheckNumber(_num6, number) == true) return 6;

            if (CheckNumber(_num7, number) == true) return 7;

            if (CheckNumber(_num8, number) == true) return 8;

            if (CheckNumber(_num9, number) == true) return 9;

            return 6;

        }

        static private bool CheckNumber(int[,] dic, int[,] number)

        {

            //逐個匹配

            for (int i = 0; i < 7; i++)

            {

                for (int j = 0; j < 10; j++)

                {

                    if (dic[i, j] == 1 && number[i, j] != 1)

                    {

                        return false;

                    }

                }



            }

            return true;

        }



        static public string getNumber(Bitmap bmp)

        {

            //調用

            string str = "";

            for (int i = 0; i <= 3; i++)

            {

                int[,] number = getNum(bmp, i);



                int m = CheckNumber(number);

                str += m.ToString();

            }

            return str;

        }

    }

}


  

用以下代碼調用就可以看到輸出結果為9637了,這個識別代碼沒有用到任何高級算法,所以也只能識別初級的驗證碼,但是對特征庫擴展之后也可以識別出規范的字母。

    System.Net.WebClient wb = new System.Net.WebClient();

            byte[] b=wb.DownloadData("http://p.blog.csdn.net/images/p_blog_csdn_net/jinjazz/355056/o_rrr.bmp");



            System.IO.MemoryStream ms=new System.IO.MemoryStream(b);



            System.Drawing.Bitmap bmp = new Bitmap(ms);



            string str = BmpNumber.Number.getNumber(bmp);

            Console.WriteLine(str);
  

一個驗證碼識別的代碼


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品久久一区二区三区四区 | 99久久99久久免费精品蜜桃 | 天天躁日日躁aaaa视频 | 久久一级视频 | 亚洲精品第一国产综合高清 | 毛片在线不卡 | 久久久久久成人精品 | 久草大 | 免费成人高清在线视频 | 丁香九月婷婷 | 亚洲综合亚洲综合网成人 | 在线视频国产一区 | 国产福利精品在线观看 | 狠狠干夜夜操 | 日韩小视频 | 国产午夜精品一区二区三区嫩草 | 4hu四虎永久免在线视看 | 欧美高清正版在线 | 一区二区三区视频免费观看 | 国产在线精品成人一区二区三区 | 久碰人澡人澡人澡人澡91 | 美女羞羞视频网站 | 成人在线欧美 | 视频一区二区不卡 | 国产婷婷色综合AV蜜臀AV | 亚洲欧洲精品一区二区 | 国产美女啪啪 | 午夜视频在线 | 色综合久久亚洲国产日韩 | 欧美激情免费观看一区 | 免费特黄一级欧美大片在线看 | 天天噜夜夜操 | 国产亚洲精品久久久久久打不开 | 99精品大香线蕉线伊人久久久 | 91人人草 | 天天视频国产 | 亚洲乱轮视频 | 97精品伊人久久久大香线蕉 | 久久福利剧场 | vidz 98hd| 97精品一区二区 |