日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > C# > 正文

使用C#的aforge類庫識別驗證碼實例

2020-01-24 02:31:11
字體:
來源:轉載
供稿:網友

時間過得真快啊,轉眼今年就要過去了,大半年都沒有寫博客了,要說時間嘛,花在泡妹子和搞英語去了,哈哈。。。前幾天老大問我

怎么這么長時間都沒寫博客了,好吧,繼續堅持,繼續分享我的心得體會。

  這個系列我們玩玩aforge.net,套用官方都話就是一個專門為開發者和研究者基于C#框架設計的,這個框架提供了不同的類庫和關于類庫的

資源,還有很多應用程序例子,包括計算機視覺與人工智能,圖像處理,神經網絡,遺傳算法,機器學習,機器人等領域,這個系列研究的重點

就是瞎幾把搞下AForge.Imaging這個命名空間下面的東東,下載網址:http://www.aforgenet.com/framework/downloads.html

    對了,不知道有多少公司是用得仕卡作為員工的福利卡,我們公司就是這樣的,每個月公司都會充值一些money,然后我們這些屁碼農每個月15號就都開心的去看看發了多少。

上去看了后,喲呵~ 還有個90年代的驗證碼,我想這年頭估計找到這樣驗證碼的網站已經不多了,如果懂一點圖像處理都話,這張驗證碼

跟沒有一個樣,謝謝。。。這篇我們看看怎么去識別它。

一: 驗證碼處理

1.  一般處理原則

    這種驗證碼為什么說跟沒有一樣,第一點:字體規范工整,第二點:不旋轉扭曲粘連,第三點:字體顏色單一,下面看處理步驟。

這里要注意的是,aforge只接受像素格式為24/32bpp的像素格式圖片,所以處理前,先進行格式轉化。

復制代碼 代碼如下:

//轉化圖片像素格式
            var bnew = new Bitmap(b.Width, b.Height, PixelFormat.Format24bppRgb);

            Graphics g = Graphics.FromImage(bnew);

            g.DrawImage(b, 0, 0);

            g.Dispose();

<1>圖片灰度化

這是圖像識別通常都要走的第一步,圖片灰度化有助于減少后續對rgb的計算量,同時也方便我們進行二值化,在aforge中我們有專門的類一步搞定,簡潔方便。

復制代碼 代碼如下:

            //灰度化
            b = new Grayscale(0.2125, 0.7154, 0.0721).Apply(b);

<2>二值化

  二值化顧名思義就是二種值,比如非白即黑,非黑即白,那么白和黑的標準就需要提供一個閾值,大于或者小于怎么樣,在aforge同樣也有相似的類進行處理

復制代碼 代碼如下:

            //二值化
            b = new Threshold(50).Apply(b);

<3> 去噪點

  從上面的圖片可以發現有很多紅點點,搞得像皮膚病一樣,仔細觀察可以看到這種噪點具有獨立,體積小的特征,所以判斷的標準就是如果圖中某個區塊的大小在我設置的閾值內,就將其去掉,同樣也有專門的類進行處理。

復制代碼 代碼如下:

            //去噪點
            new BlobsFiltering(1, 1, b.Width, b.Height).Apply(b);

  這里具體怎么傳遞參數,后續系列會慢慢解讀。

<4>切割圖片

   切圖片的好處在于我們需要知道真正要識別的元素的有效范圍是多大,同時也方便我們將這些圖片作為模板保存下來。

代碼如下:

復制代碼 代碼如下:

/// <summary>
        /// 按照 Y 軸線 切割
        /// (丟棄等于號)
        /// </summary>
        /// <param name="?"></param>
        /// <returns></returns>
        public List<Bitmap> Crop_Y(Bitmap b)
        {
            var list = new List<Bitmap>();

            //統計每一列的“1”的個數,方便切除
            int[] cols = new int[b.Width];

            /*
             *  縱向切割
             */
            for (int x = 0; x < b.Width; x++)
            {
                for (int y = 0; y < b.Height; y++)
                {
                    //獲取當前像素點像素
                    var pixel = b.GetPixel(x, y);

                    //說明是黑色點
                    if (pixel.R == 0)
                    {
                        cols[x] = ++cols[x];
                    }
                }
            }

            int left = 0, right = 0;

            for (int i = 0; i < cols.Length; i++)
            {
                //說明該列有像素值(為了防止像素干擾,去噪后出現空白的問題,所以多判斷一下,防止切割成多個)
                if (cols[i] > 0 || (i + 1 < cols.Length && cols[i + 1] > 0))
                {
                    if (left == 0)
                    {
                        //切下來圖片的橫坐標left
                        left = i;
                    }
                    else
                    {
                        //切下來圖片的橫坐標right
                        right = i;
                    }
                }
                else
                {
                    //說明已經有切割圖了,下面我們進行切割處理
                    if ((left > 0 || right > 0))
                    {
                        Crop corp = new Crop(new Rectangle(left, 0, right - left + 1, b.Height));

                        var small = corp.Apply(b);

                        //居中,將圖片放在20*50的像素里面

                        list.Add(small);
                    }

                    left = right = 0;
                }
            }

            return list;
        }

        /// <summary>
        /// 按照 X 軸線 切割
        /// </summary>
        /// <param name="b"></param>
        /// <returns></returns>
        public List<Bitmap> Crop_X(List<Bitmap> list)
        {
            var corplist = new List<Bitmap>();

            //再對分割的圖進行上下切割,取出上下的白邊
            foreach (var segb in list)
            {
                //統計每一行的“1”的個數,方便切除
                int[] rows = new int[segb.Height];

                /*
                 *  橫向切割
                 */
                for (int y = 0; y < segb.Height; y++)
                {
                    for (int x = 0; x < segb.Width; x++)
                    {
                        //獲取當前像素點像素
                        var pixel = segb.GetPixel(x, y);

                        //說明是黑色點
                        if (pixel.R == 0)
                        {
                            rows[y] = ++rows[y];
                        }
                    }
                }

                int bottom = 0, top = 0;

                for (int y = 0; y < rows.Length; y++)
                {
                    //說明該行有像素值(為了防止像素干擾,去噪后出現空白的問題,所以多判斷一下,防止切割成多個)
                    if (rows[y] > 0 || (y + 1 < rows.Length && rows[y + 1] > 0))
                    {
                        if (top == 0)
                        {
                            //切下來圖片的top坐標
                            top = y;
                        }
                        else
                        {
                            //切下來圖片的bottom坐標
                            bottom = y;
                        }
                    }
                    else
                    {
                        //說明已經有切割圖了,下面我們進行切割處理
                        if ((top > 0 || bottom > 0) && bottom - top > 0)
                        {
                            Crop corp = new Crop(new Rectangle(0, top, segb.Width, bottom - top + 1));

                            var small = corp.Apply(segb);

                            corplist.Add(small);
                        }

                        top = bottom = 0;
                    }
                }
            }

            return corplist;
        }

<5> 圖片精處理

  這里要注意的是,比如數字“2”,切除上下左右的空白后,再加上噪點的干擾,不一定每次切下來的圖片大小都一樣,所以這里為了方便更好的識別,我們需要重置下圖片的大小,并且將“數字2”進行文字居中。

復制代碼 代碼如下:

/// <summary>
        /// 重置圖片的指定大小并且居中
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public List<Bitmap> ToResizeAndCenterIt(List<Bitmap> list, int w = 20, int h = 20)
        {
            List<Bitmap> resizeList = new List<Bitmap>();


            for (int i = 0; i < list.Count; i++)
            {
                //反轉一下圖片
                list[i] = new Invert().Apply(list[i]);

                int sw = list[i].Width;
                int sh = list[i].Height;

                Crop corpFilter = new Crop(new Rectangle(0, 0, w, h));

                list[i] = corpFilter.Apply(list[i]);

                //再反轉回去
                list[i] = new Invert().Apply(list[i]);

                //計算中心位置
                int centerX = (w - sw) / 2;
                int centerY = (h - sh) / 2;

                list[i] = new CanvasMove(new IntPoint(centerX, centerY), Color.White).Apply(list[i]);

                resizeList.Add(list[i]);
            }

            return resizeList;
        }

其實精處理后,這些圖片就可以作為我們的模板庫的圖片了,可以將每張模板圖都標記下具體的數字,后續我們再遇到時,計算下其相似度就可以了,下面就是已經制作好的模板。

<6> 模板匹配識別

  既然模板圖片都制作好了,一切都差不多水到渠成了,下次來的驗證碼我都切好后做成精圖片后跟模板進行匹配,在afroge里面

有一個ExhaustiveTemplateMatching,專門用來進行模板匹配用的,很方便。

復制代碼 代碼如下:

 ExhaustiveTemplateMatching templateMatching = new ExhaustiveTemplateMatching(0.9f);

這里的0.9f就是設定的閾值,只有大于0.9的閾值,我才認為該模板與目標圖片相似,然后在所有大于0.9的相似度中取到最大的一個作為

我們最后識別的圖像。

復制代碼 代碼如下:

var files = Directory.GetFiles(Environment.CurrentDirectory + "//Template//");

            var templateList = files.Select(i => { return new Bitmap(i); }).ToList();
            var templateListFileName = files.Select(i => { return i.Substring(30, 1); }).ToList();

            var result = new List<string>();

            ExhaustiveTemplateMatching templateMatching = new ExhaustiveTemplateMatching(0.9f);

            //這里面有四張圖片,進行四張圖的模板匹配
            for (int i = 0; i < list.Count; i++)
            {
                float max = 0;
                int index = 0;

                for (int j = 0; j < templateList.Count; j++)
                {
                    var compare = templateMatching.ProcessImage(list[i], templateList[j]);

                    if (compare.Length > 0 && compare[0].Similarity > max)
                    {
                        //記錄下最相似的
                        max = compare[0].Similarity;
                        index = j;
                    }
                }

                result.Add(templateListFileName[index]);
            }

最后的效果還是不錯的,識別率基本100%吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产黄色一区| 久久香蕉精品| 免费在线视频一级不卡| 一本大道一区二区三区| 亚洲欧洲日韩在线| 午夜影院在线观看欧美| 亚洲视频在线观看三级| 91久久精品网| 国产午夜在线观看| 欧美大片在线观看一区| 国产免费电影网站入口| 国产绿帽一区二区三区| 欧美在线日韩精品| 91精品国产综合久久福利| 日韩免费精品视频| 在线视频色在线| 精品福利一区二区三区| 精品亚洲综合| 欧美高清一区| 美女尤物久久精品| 久久精品99国产国产精| 日韩在线中文| 国产婷婷色一区二区三区| 欧美日韩精品电影| 国产一卡2卡3卡免费网站| 国产成人精品免费久久久久| 国产欧美久久久| 精品播放一区二区| 日韩欧美中文在线| 黄色一区二区在线观看| 精品免费视频| 日韩欧美高清在线| 日韩国产欧美| 日韩在线视频免费观看| 九一精品国产| 国产资源在线观看| 高清1区2区| 92久久精品| 激情五月综合| 激情久久99| 国产欧美日韩成人| 国产免费一级片| 日韩一级二级三级精品视频| 精品日韩一区二区三区免费视频| 不卡在线视频| 日本不卡免费高清视频| 亚洲va久久久噜噜噜久久| 国产视频一区三区| 日韩欧美高清在线视频| 一区二区在线高清视频| 热久久精品国产| 亚洲国产无线乱码在线观看| 日韩视频一区二区在线观看| 精品极品三级久久久久| 在线视频1区2区| 亚欧成人精品| 国产性一级片| 欧美日韩国产不卡| 视频一区中文字幕国产| 亚洲视频资源在线| 日韩在线观看一区| 91精品国产自产| 亚洲免费精品视频| 中文字幕亚洲字幕| 免费国产成人看片在线| 日韩.欧美.亚洲| 91精品999| 日本中文字幕在线观看| 亚洲a级在线播放观看| 日韩 欧美 综合| 最近中文av字幕在线中文| 国产日韩在线亚洲字幕中文| 日韩三级精品| 黄色片免费看| 欧美天堂一区二区| 黄色片免费在线| 一级片免费网站| 99视频一区| 日韩免费视频| 欧美日韩成人综合| 欧美日韩亚州综合| 日韩视频 中文字幕| 国产日韩精品久久久| 国产黄色网页| 日本不卡视频一区| 激情综合色综合久久| 色综合久久六月婷婷中文字幕| 亚洲一二三不卡| 日韩精品不卡一区二区| 亚洲欧洲日韩精品在线| 一区二区三区高清在线| 精品国产乱码一区二区| 日韩欧美国产片| 国产区在线看| 五月综合激情日本mⅴ| 日韩欧美一二三四区| 精品欧美日韩| 在线欧美日韩国产| 欧美日韩在线看| 天堂在线中文| www在线播放| www.狠狠干| 二区中文字幕| 中文官网资源新版中文第二页在线观看| 国产不卡视频在线| 午夜私人影院在线观看| 999精品在线| 亚洲一卡二卡在线观看| 日韩中文字幕精品视频| 午夜国产欧美理论在线播放| 亚洲一区资源| 精品视频www| 精品日韩一区二区三区免费视频| 亚洲美女视频一区| 1区2区3区在线视频| 91极品视频在线观看| 中文字幕亚洲一区二区av在线| 欧美日韩久久不卡| 国产激情久久久| 日韩1区在线| 日韩视频在线一区| 亚洲高清视频一区| aa国产成人| 久久精品人妻一区二区三区| 精品区一区二区| 成人ww免费完整版在线观看| 一区二区在线观看不卡| 激情婷婷亚洲| 欧美日韩久久久| 中文字幕一区免费| 中文字幕在线欧美| 久久香蕉精品| 国产一区免费视频| 午夜国产福利在线观看| 亚洲综合日韩欧美| 91午夜在线| 91精品综合久久久久久| 亚洲一区中文字幕在线| 国产一区 二区 三区一级| 国产在线欧美日韩| 欧美日韩国产大片| 在线日韩中文字幕| 国产视频三级在线观看播放| 欧美日韩午夜精品| 亚洲一区不卡在线| 精品日韩av一区二区| www.三级.com| 一级片在线免费看| 日韩欧美一级精品久久| 日韩视频在线观看一区| 精品在线网站观看| 欧美一级在线免费| 国产一级片在线| 中文字幕无线码一区| 亚洲一区中文在线| www.狠狠干| 亚洲黄页一区| 日本精品在线中文字幕| 日韩精品视频在线看| 日韩精品高清不卡| 久久精品卡一| 不卡一区2区| 欧美日韩国产区| 欧美 日韩 国产 高清| 欧美日韩999| 日韩三级高清在线| 91精品国产91久久久久| 99视频一区| 国产日韩亚洲欧美| 福利在线国产| 国产www在线观看| 亚洲第一香蕉网| 中文字幕欧美日韩va免费视频| 欧美日韩国产一二| 亚洲成av人综合在线观看| 二区三区不卡不卡视频| 91精品国产色综合久久不卡蜜臀| 国产一级片在线播放| 九九精品调教| 国产乱国产乱300精品| 亚洲狠狠婷婷综合久久久久图片| 亚洲视频在线观看三级| 一区二区中文视频| 欧美日韩国产页| 国产日韩亚洲欧美| 欧美高清一区| 国产欧美日韩中文字幕在线| 亚洲一级二级| 欧美日韩在线播放视频| 日韩精品中文字幕第1页| 国产欧美日韩精品在线| 日韩国产专区| 一级特黄大欧美久久久| 在线视频色在线| 精品1区2区3区| 亚洲欧洲精品在线| 二区中文字幕| 国产婷婷色一区二区三区在线| 午夜影院在线观看欧美| 91精品999| 午夜国产在线| 中文字幕日韩精品在线| 香蕉av一区| 日韩国产成人| 91精品网站| 91精品国产自产在线丝袜啪| 久久久精品福利| 欧美日韩国产一二三| 久久精品网站免费观看| 一区二区中文字幕在线| 欧美日韩国产一区| 亚洲校园欧美国产另类| 日本熟女一区二区| 国产欧美中文字幕| 国产免费久久久| 国产在线高清精品| 欧美婷婷久久| 国产一级网站视频在线| 亚洲黄色片在线观看| 欧美日韩免费不卡视频一区二区三区| 日韩av一区在线| 日韩中文首页| 蜜桃久久av一区| 国产欧美日韩精品在线| 国产日韩精品久久久| 在线观看一区日韩| 亚洲三级av| 日韩不卡一二区| 国产欧美综合视频| 一区二区高清视频| 视频一区日韩| aaa欧美日韩| 国产视频中文字幕在线观看| av中文在线资源| av最新网址| 国产欧美中文字幕| 国产农村妇女精品一二区| 久久精品日韩无码| 欧美日韩国产高清视频| 日韩欧美成人一区二区三区| 亚洲综合在线小说| 欧美日韩免费不卡视频一区二区三区| 欧美日韩国产页| 中文字幕在线中文字幕二区| 日韩国产在线不卡视频| 91麻豆免费视频网站| 久久精品在线观看| 中文在线一区| 日韩精品在线看| 日韩欧美国产视频| 午夜伦欧美伦电影理论片| 在线中文字幕视频| 午夜亚洲福利| 在线视频色在线| 欧美日韩99| 久久久91精品| 日韩免费高清一区二区| 欧美91精品| av亚洲免费| 日韩精品视频在线看| 色妇色综合久久夜夜| 欧美亚洲天堂| 国产高清在线视频| 久久99久久久久久久噜噜| 91精品在线国产| 日韩亚洲欧美中文三级| 精品久久91| 韩国v欧美v日本v亚洲| 国产视频中文字幕在线观看| 一区二区三区精品在线| 亚洲国产无线乱码在线观看| 中文字幕一区二区三区精品| 中文字幕在线视频精品| 精品播放一区二区| 精品国产乱码久久久久久蜜臀| 日韩精品在线视频| 日韩精品在线观| 日韩在线a电影| 亚洲午夜av| 日韩欧美一二三四区| 久久精品国产91精品亚洲| 日韩在线观看视频一区二区| 午夜高潮免费视频| 日韩欧美综合视频| 久久久99久久精品欧美 | 日本精品二区| 91精品国产91久久久久| 视频一区二区国产| 久久精品电影| 国产在线拍揄自揄拍| 色综合天天综合网国产成人综合天| 亚洲热在线观看| 欧美日韩三级在线| 欧美久久久精品| 91精品999| 国产一级在线免费观看| 欧美日韩亚洲国内综合网| 快she精品国产999| 中文在线不卡| 欧美一级免费在线观看| 免费精品国产自产拍在| 中文字幕亚洲免费| 丰满少妇一区| 91蜜桃婷婷狠狠久久综合9色| 99久久www免费| 男人的天堂网av| 色www精品视频在线观看| 日韩精品大片| aaa欧美日韩| 久久99精品久久久久久青青日本| 亚洲免费观看视频| 日韩在线视频在线观看| 国产一级视频| 中文字幕日韩欧美在线| 亚洲中文字幕一区| 国产福利在线播放| 一级片在线免费看| 中文字幕在线看精品乱码| 亚洲成在线观看| 国产欧美日韩综合精品| 国产在线日韩精品| 日韩亚洲欧美中文高清在线| 中文精品视频| www.狠狠干| 欧美人妻一区二区三区| 日韩在线视频中文字幕| 欧美一卡2卡3卡4卡| 中文字幕国产欧美| 中文字幕中文字幕精品| 中文字幕欧美日韩在线| 国产三级做爰在线观看| 91精品在线观看国产| 欧美日韩日本视频| 精品福利在线观看| 日韩wumaV| 久久久另类综合| 影音先锋中文字幕在线观看| 在线精品日韩| 一区二区精品免费| 亚洲尤物av| 亚洲视频 中文字幕| 国产福利三区| 日韩av在线中文字幕| 欧美三级在线视频| 欧美一级欧美三级在线观看| 国产成人精品网址| 92久久精品| 精品人妻一区二区三区视频| 欧美日韩中文字幕一区| 日本免费在线视频不卡一不卡二| 黄色一区二区在线| 亚洲第一香蕉网| 欧美在线视频一区二区| 精品久久91| 国产欧美日韩在线| 国产中文在线播放| 中文字幕精品一区二区三区在线 | 91精品xxx在线观看| 日本黄色一区二区| 最近中文字幕在线中文高清版| 午夜亚洲一区| 欧美日韩高清一区二区不卡| 日韩欧美在线网站| 日韩精品不卡一区二区| 亚洲美女视频一区| 一级网站免费观看| 国产黄色片大全| а√天堂中文在线资源8| 亚洲综合日韩中文字幕v在线| a视频免费看| 久久久综合精品| 国产欧美 在线欧美| 欧美日韩国产一区| 自拍日韩亚洲一区在线| 欧美三级免费观看| 国产日韩第一页v| 中文字幕99| 中文字幕在线视频第一页| 国内激情久久| 在线国产三级| 日韩国产在线观看一区| 欧美激情视频一区二区三区在线播放| 香蕉av一区| 国产免费一级| 亚洲成年人在线播放| 精品久久久久久无| 欧美日韩视频在线| 91麻豆精品在线| 阿v免费在线观看| 亚洲va久久久噜噜噜久久| 亚洲电影中文字幕在线观看| 91精品国产综合久久久久久漫画 | 日韩欧美一级视频| 日韩精品在线第一页| 亚洲一区中文字幕在线观看| 欧美日韩高清一区二区不卡| 欧美日韩精品电影| 国产成免费视频| 国产欧美日韩在线| 欧美在线日韩精品|