C#實(shí)現(xiàn)的簡(jiǎn)單驗(yàn)證碼識(shí)別實(shí)例
最近做一個(gè)小玩意需要識(shí)別驗(yàn)證碼,之前從來(lái)沒(méi)有接觸過(guò)識(shí)別驗(yàn)證碼這塊,這可難倒了我。所以,在網(wǎng)上搜索如何識(shí)別驗(yàn)證碼,許多前輩寫的博文教會(huì)了我。怕以后又忘記了,故此寫篇隨筆記錄。
我要識(shí)別的驗(yàn)證碼是一種非常簡(jiǎn)單,如圖:
識(shí)別步驟:
1、圖片灰度化(把彩色的驗(yàn)證碼圖片轉(zhuǎn)換成灰色的圖片)、圖片二值化
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++) //雙重循環(huán),遍歷驗(yàn)證碼圖片的像素點(diǎn)
{
Color color = bmp.GetPixel(i, j); //取位圖某點(diǎn)顏色
int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11); //灰度化
if (gray * 0.2125 + gray * 0.7154 + gray * 0.0721 >= v) //二值化,v為閾值,大于等于閾值的設(shè)為白色,否者設(shè)為黑色
{
bmp.SetPixel(i, j, Color.FromArgb(255, 255, 255));
}
else
{
bmp.SetPixel(i, j, Color.FromArgb(0, 0, 0));
}
}
}
經(jīng)過(guò)圖片灰度化的處理,圖片就成這樣子:
經(jīng)過(guò)圖片二值化的處理,圖片就成這樣子:
2、圖片分割(把四個(gè)數(shù)字分割出來(lái),保存像素點(diǎn)代碼)
把原來(lái)的整個(gè)驗(yàn)證碼圖片按照固定的寬、高分割出來(lái)(我是按左邊距6像素,頂邊距4像素,間隔4像素,寬9像素,高12像素分割)。然后取出各個(gè)數(shù)字圖片的像素色,255輸出1,其他輸出0。就得到108(9*12)個(gè)0,1了。
111111111111111000000111100000000001001111111100011111111110001111111100100000000001111000000111111111111111
保存完所有數(shù)字(0-9)的0,1代碼之后,以后就直接與這9串0,1模糊匹配(有雜色的可能,所以要模糊匹配),然后就實(shí)現(xiàn)了自動(dòng)識(shí)別驗(yàn)證碼。
相關(guān)文章
C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用(上)
本篇文章對(duì)C#中ExpandoObject,DynamicObject,DynamicMetaOb的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Unity腳本自動(dòng)添加頭部注釋的全過(guò)程
在一些公司需要代碼嚴(yán)格的管理,有時(shí)候會(huì)需要用到每個(gè)腳本的頭部做一些介紹,所以下面這篇文章主要給大家介紹了關(guān)于Unity腳本自動(dòng)添加頭部注釋的相關(guān)資料,需要的朋友可以參考下2022-01-01
Unity?UGUI的CanvasScaler畫布縮放器組件介紹使用
這篇文章主要為大家介紹了Unity?UGUI的CanvasScaler畫布縮放器組件介紹使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
C#實(shí)現(xiàn)將網(wǎng)頁(yè)保存成圖片的網(wǎng)頁(yè)拍照功能
這篇文章主要介紹了C#實(shí)現(xiàn)將網(wǎng)頁(yè)保存成圖片的網(wǎng)頁(yè)拍照功能,很實(shí)用的一個(gè)功能,需要的朋友可以參考下2014-07-07
利用windows性能計(jì)數(shù)器進(jìn)行服務(wù)器性能監(jiān)控示例分享
這篇文章主要介紹了利用windows性能計(jì)數(shù)器進(jìn)行服務(wù)器性能監(jiān)控的方法,大家可以參考擴(kuò)展其它功能2014-01-01

