2022年验证码识别算法知识 .pdf

上传人:H****o 文档编号:34237775 上传时间:2022-08-15 格式:PDF 页数:6 大小:123.94KB
返回 下载 相关 举报
2022年验证码识别算法知识 .pdf_第1页
第1页 / 共6页
2022年验证码识别算法知识 .pdf_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《2022年验证码识别算法知识 .pdf》由会员分享,可在线阅读,更多相关《2022年验证码识别算法知识 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、最近写了几个网站的验证码图片自动识别程序,尽管每个网站的验证码图片都不相同,识别的方法有所差别。但写得多了,也总结出不少相同之处。今天抽空封装出一个基础类来,发现可以很好地重复利用,编写不同的验证码识别程序,效率提高了不少。好东东不能独享,现放出来供大家共同研究,请网友们妥善用之。封装后的类使用很简单,针对不同的验证码,相应继承修改某些方法,即可简单几句代码就可以实现图片识别了:GrayByPixels(); /灰度处理GetPicValidByValue(128, 4); /得到有效空间Bitmap pics = GetSplitPics(4, 1); / 分割string code = G

2、etSingleBmpCode(picsi, 128); / 得到代码串具体使用,请参见我做的例子:投票程序示例.exe投票程序源码(例子说明:使用进程投票,可自动清除Alert弹出窗口,可自动换IP,ADSL用户自行修改 Restart.bat中第三行内容)using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.Inte

3、ropServices; namespace BallotAiying2 class UnCodebase public Bitmap bmpobj; public UnCodebase(Bitmap pic) bmpobj = new Bitmap(pic); / 转换为 Format32bppRgb /根据 RGB ,计算灰度值/Color值/灰度值,整型privateint GetGrayNumColor(System.Drawing.Color posClr) return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472)

4、16; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - /灰度转换 ,逐点方式/publicvoid GrayByPixels() for ( int i = 0; i bmpobj.Height; i+) for ( int j = 0; j bmpobj.Width; j+) int tmpValue = GetGrayNumColor(bmpobj.GetPixel(j, i); bmpobj.SetPixel(j, i,

5、 Color.FromArgb(tmpValue, tmpValue, tmpValue); /去图形边框/publicvoid ClearPicBorder(int borderWidth) for ( int i = 0; i bmpobj.Height; i+) for ( int j = 0; j bmpobj.Width; j+) if (i borderWidth | j bmpobj.Width - 1 - borderWidth | i bmpobj.Height - 1 - borderWidth) bmpobj.SetPixel(j, i, Color.FromArgb(2

6、55, 255, 255); /灰度转换 ,逐行方式/publicvoid GrayByLine() Rectangle rec = new Rectangle(0, 0, bmpobj.Width, bmpobj.Height); BitmapData bmpData = bmpobj.LockBits(rec, ImageLockMode.ReadWrite, bmpobj.PixelFormat);/ PixelFormat.Format32bppPArgb); / bmpData.PixelFormat = PixelFormat.Format24bppRgb; IntPtr scan

7、0 = bmpData.Scan0; int len = bmpobj.Width * bmpobj.Height; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - int pixels = newint len; Marshal.Copy(scan0, pixels, 0, len); / 对图片进行处理int GrayValue = 0; for ( int i = 0; i len; i+) GrayValue = Get

8、GrayNumColor(Color.FromArgb(pixelsi); pixelsi = (byte )(Color.FromArgb(GrayValue, GrayValue, GrayValue).ToArgb(); /Color转 byte bmpobj.UnlockBits(bmpData); /得到有效图形并调整为可平均分割的大小/灰度背景分界值/有效字符数 /publicvoid GetPicValidByValue(int dgGrayValue, int CharsCount) int posx1 = bmpobj.Width; int posy1 = bmpobj.He

9、ight; int posx2 = 0; int posy2 = 0; for ( int i = 0; i bmpobj.Height; i+) / 找有效区 for ( int j = 0; j bmpobj.Width; j+) int pixelValue = bmpobj.GetPixel(j, i).R; if (pixelValue j) posx1 = j; if (posy1 i) posy1 = i; if (posx2 j) posx2 = j; if (posy2 i) posy2 = i; ; ; ; / 确保能整除int Span = CharsCount - (p

10、osx2 - posx1 + 1) % CharsCount; / 可整除的差额数if (Span leftSpan) posx1 = posx1 - leftSpan; if (posx2 + Span - leftSpan bmpobj.Width) posx2 = posx2 + Span - leftSpan; / 复制新图 Rectangle cloneRect = new Rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1); bmpobj = bmpobj.Clone(cloneRect, bmpobj.Pix

11、elFormat); /得到有效图形,图形为类变量/灰度背景分界值/有效字符数 /publicvoid GetPicValidByValue(int dgGrayValue) int posx1 = bmpobj.Width; int posy1 = bmpobj.Height; int posx2 = 0; int posy2 = 0; for ( int i = 0; i bmpobj.Height; i+) / 找有效区 for ( int j = 0; j bmpobj.Width; j+) int pixelValue = bmpobj.GetPixel(j, i).R; if (p

12、ixelValue j) posx1 = j; if (posy1 i) posy1 = i; if (posx2 j) posx2 = j; if (posy2 i) posy2 = i; ; ; ; / 复制新图 Rectangle cloneRect = new Rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1); bmpobj = bmpobj.Clone(cloneRect, bmpobj.PixelFormat); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -

13、 - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - /得到有效图形,图形由外面传入/灰度背景分界值/有效字符数 /public Bitmap GetPicValidByValue(Bitmap singlepic, int dgGrayValue) int posx1 = singlepic.Width; int posy1 = singlepic.Height; int posx2 = 0; int posy2 = 0; for ( int i = 0; i singlepic.Height; i+) / 找有效区 for

14、( int j = 0; j singlepic.Width; j+) int pixelValue = singlepic.GetPixel(j, i).R; if (pixelValue j) posx1 = j; if (posy1 i) posy1 = i; if (posx2 j) posx2 = j; if (posy2 i) posy2 = i; ; ; ; / 复制新图 Rectangle cloneRect = new Rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1); return singlepic

15、.Clone(cloneRect, singlepic.PixelFormat); /平均分割图片/水平上分割数/垂直上分割数/分割好的图片数组public Bitmap GetSplitPics(int RowNum,int ColNum) if (RowNum = 0 | ColNum = 0) returnnull ; int singW = bmpobj.Width / RowNum; int singH = bmpobj.Height / ColNum; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -

16、 - - - - - - 第 5 页,共 6 页 - - - - - - - - - Bitmap PicArray=new BitmapRowNum*ColNum; Rectangle cloneRect; for ( int i = 0; i ColNum; i+) / 找有效区 for ( int j = 0; j RowNum; j+) cloneRect = new Rectangle(j*singW, i*singH, singW , singH); PicArrayi*RowNum+j=bmpobj.Clone(cloneRect, bmpobj.PixelFormat);/ 复

17、制小块图 return PicArray; /返回灰度图片的点阵描述字串,1 表示灰点, 0 表示背景/灰度图 /背前景灰色界限/publicstring GetSingleBmpCode(Bitmap singlepic, int dgGrayValue) Color piexl; string code = ; for ( int posy = 0; posy singlepic.Height; posy+) for ( int posx = 0; posx singlepic.Width; posx+) piexl = singlepic.GetPixel(posx, posy); if (piexl.R dgGrayValue) / Color.Black ) code = code + 1; else code = code + 0; return code; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁