有相关经验的人给我来email
识别的东西比较简单。是0-9的彩色数字。底色有点噪点处理。数字有高低干扰。左右偏移好像没有。
所以我认为思路是这样的。用图像处理的控件去掉底色。图片处理成单色。然后切割图片。和预先得到的库做比较。有意的来email
[email protected]
[email protected]
或者直接q我也可以。号码就是341591
识别的东西比较简单。是0-9的彩色数字。底色有点噪点处理。数字有高低干扰。左右偏移好像没有。
所以我认为思路是这样的。用图像处理的控件去掉底色。图片处理成单色。然后切割图片。和预先得到的库做比较。有意的来email
[email protected]
[email protected]
或者直接q我也可以。号码就是341591
是用DirectX编程吧
帮忙顶
还有开放的控件可以用.去baidu搜一下吧,你会有收获的.
然后用Bitmap捣入这张图片。
从左到右,从上到下。用GetPixel的方法得到每一个point的象素值。
把与底色不同的颜色(可以认为0,0象素的颜色是底色,因为一般噪点及数字颜色不会在那里的)加入pointlist。然后得到10模板,以后就可以判断了。举个例子:
数字1吧。你先用图片处理工具,把噪点弄成和底色一样的。
然后就可以建立与底色不一样颜色值的point arraylist.
比如(5,3)(5,4),(5,5),(5,6),(5,7)是与底色不同的颜色。然后把每个象素减去首个象素5,3的值。就得到(0,0),(0,1),(0,2),(0,3),(0,4)这个arraylist表示数字1
以后如果有一个图片,那我们对取的象素值进行收集。首先从左到右,从上到下。判断共有几种颜色。生成几个point arraylist.相同颜色的归到一个point arraylist内,然后去掉(0,0)点所在的point arraylist,因为这个点一般是底色。剩下的元素最多的就是数字的颜色值了。
这个列表中的每个元素减去首元坐标。然后看这个列表的颜色是否在刚刚的1这个列表中,如果有90%以上在这个列表中就表示是了。依此类推
对了。最好能像 Lorenes(晓帆)提到的那样找一个现成的ocr控件。同样给分。只要能解决识别问题不管用什么方法。只要能在c#程序中得到这个识别出来的文字(数字)就算完成问题。可得到1000分。我只有1500分左右。这可是大放血了另外我的确在百度找到了一个 orc sdk不过是商业软件。5555~~~~~~~
先生成一个随机数,比如2547,然后在界面上绘图,比对即可
http://www.x163.org/?r=phiazat
而我要的是程序自动识别这种验证吗。从而可以自动提交数据。^_^。。其实就是简单的orc
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Web;
using System.IO;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;namespace Xiaoxiao.DiskU.Include
{
/// <summary>
/// RandomImg 的摘要说明。
/// </summary>
public class RandomImg : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
Random rnd = new Random();
string rndnum;
rndnum=rnd.Next(10,99)+rnd.Next(10,99).ToString();
this.Session["ikkk"]=rndnum;
Bitmap MyBitmap=null;
Graphics g=null;
string ShowStr=(string)this.Session["ikkk"];
SizeF SF;
int Width;
int Height;
Font MyFont=new Font("Small Fonts", 9, FontStyle.Bold );
MemoryStream MS;
if (ShowStr == null || ShowStr == "")
ShowStr = "error";
try
{
try
{
MyBitmap = new Bitmap(2, 2,PixelFormat.Format24bppRgb);
g = Graphics.FromImage(MyBitmap);
SF = g.MeasureString(ShowStr, MyFont);
Width = (int) SF.Width;
Height = (int) SF.Height;
g.Dispose();
MyBitmap.Dispose();
MyBitmap = new Bitmap(Width, Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
g = Graphics.FromImage(MyBitmap);
g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, Width, Height));
g.DrawString(ShowStr,MyFont, new SolidBrush(Color.DarkBlue), 0, 0);
MS = new MemoryStream();
MyBitmap.Save(MS, System.Drawing.Imaging.ImageFormat.Gif);
this.Response.ClearContent();
this.Response.ContentType = "image/gif";
this.Response.BinaryWrite(MS.ToArray());
this.Response.End();
}
catch (Exception ee)
{
this.Response.Write(ee.ToString());
}
}
finally
{
if (ShowStr != null)
g.Dispose();
if (MyBitmap == null)
MyBitmap.Dispose();
}
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
{//这里的数字5代表显示的是4位的验证字符串!
string num = RndNum(5);
Session["Check"] = num;
ValidateCode(num);
}
public string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ;//由于字符串很短,就不用StringBuilder了
int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数 //采用一个简单的算法以保证生成随机数的不同
Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if ( temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
//int t = rand.Next(35) ;
int t=rand.Next(10);
if (temp != -1 && temp == t)
{
return RndNum( VcodeNum );
}
temp = t ;
VNum += VcArray[t]; }
return VNum ;
}/// <summary>
/// 生成图像函数。
/// </summary>
private void ValidateCode(string VNum)
{
int Gheight = 46;
//gheight为图片宽度,根据字符长度自动更改图片宽度 System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20);
Graphics g = Graphics.FromImage(Img);
g.FillRectangle(new LinearGradientBrush(new Point(0,0), new Point(Gheight,20),Color.FromArgb(175,255,40,60),Color.FromArgb(175,60,40,255)),0,0,120,30);
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
g.DrawString(VNum,new System.Drawing.Font("Arial",10),new System.Drawing.SolidBrush(Color.Black),3,3);
g.DrawString(VNum,new System.Drawing.Font("Arial",10),new System.Drawing.SolidBrush(Color.White),4,2);
System.IO.MemoryStream ms=new System.IO.MemoryStream();
Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png); Response.ClearContent(); //需要输出图象信息 要修改HTTP头
Response.ContentType="image/Png";
Response.BinaryWrite(ms.ToArray()); g.Dispose();
Img.Dispose();
//Response.End();
}另外一个页面//判断验证码
if(Session["CheckCode"]!=null&&this.ViewCode.Text.Trim()==Session["Check"].ToString().Trim())
{........}