图像识别解决方案(验证码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图像识别解决方案(验证码) 篇一:用于验证码图片识别的类

用于验证码图片识别的类(C#源码)

最近写了几个网站的验证码图片自动识别程序,尽管每个网站的验证码图片都不相同,识别的方法有所差别。但写得多了,也总结出不少相同之处。今天抽空封装出一个基础类来,发现可以很好地重复利用,编写不同的验证码识别程序,效率提高了不少。好东东不能独享,现放出来供大家共同研究,请网友们妥善用之。

封装后的类使用很简单,针对不同的验证码,相应继承修改某些方法,即可简单几句代码就可以实现图片识别了:GrayByPixels(); //灰度处理

GetPicValidByValue(128, 4); //得到有效空间

Bitmap[] pics = GetSplitPics(4, 1); //分割

string code = GetSingleBmpCode(pics[i], 128);//得到代码串

using

System;

using

;

using

using

;

using

;

using

;

using

;

namespace BallotAiying2

{

class

UnCodebase

{

public

Bitmap bmpobj;

public

UnCodebase(Bitmap pic)

{

bmpobj = new Bitmap(pic); //转换为Format32bppRgb

///

/// 根据RGB,计算灰度值

///

/// Color值

/// 灰度值,整型

private int

GetGrayNumColor( posClr)

{

return ( * 19595 + * 38469 + posClr .B * 7472) >> 16;

}

///

/// 灰度转换,逐点方式

///

public void

GrayByPixels()

{

for (int

i = 0; i {

for (int

j = 0; j {

int

tmpValue = GetGrayNumColor((j, i));

(j, i, Color

.FromArgb(tmpValue, tmpValue, tmpValue)); }

}

}

///

/// 去图形边框

///

///

public void ClearPicBorder(int

borderWidth)

{

for (int

i = 0; i {

for (int

j = 0; j {

if (i - 1 - borderWidth

|| i > - 1 - borderWidth)

(j, i, Color

.FromArgb(255, 255, 255));

}

}

}

///

/// 灰度转换,逐行方式

///

public void

GrayByLine()

{

Rectangle rec = new

Rectangle(0, 0, , );

BitmapData bmpData = (rec, , ); // );

// = ;

IntPtr scan0 = ;

int

len = * ;

int[] pixels = new int [len];

(scan0, pixels, 0, len);

//对图片进行处理

int

GrayValue = 0;

for (int

i = 0; i {

GrayValue = GetGrayNumColor(Color

.FromArgb(pixels[i]));

pixels[i] = (byte)((GrayValue, GrayValue, GrayValue)).ToArgb(); //Color转

byte

}

(bmpData);

}

///

/// 得到有效图形并调整为可平均分割的大小

///

/// 灰度背景分界值

/// 有效字符数

///

public void GetPicValidByValue(int dgGrayValue,

int

CharsCount)

{

int posx1 = ; int

posy1 = ;

int posx2 = 0; int

posy2 = 0;

for (int i = 0; i {

for (int

j = 0; j {

int

pixelValue = (j, i).R;

if (pixelValue {

if

(posx1 > j) posx1 = j;

if

(posy1 > i) posy1 = i;

if

(posx2 if

(posy2 };

};

相关文档
最新文档