有相关经验的人给我来email
识别的东西比较简单。是0-9的彩色数字。底色有点噪点处理。数字有高低干扰。左右偏移好像没有。
所以我认为思路是这样的。用图像处理的控件去掉底色。图片处理成单色。然后切割图片。和预先得到的库做比较。有意的来email
[email protected]
[email protected]
或者直接q我也可以。号码就是341591

解决方案 »

  1.   

    图像识别阿
    是用DirectX编程吧
    帮忙顶
      

  2.   

    哈,你干嘛偏要自己做呢,有现成的屏幕识别软件呢.
    还有开放的控件可以用.去baidu搜一下吧,你会有收获的.
      

  3.   

    你要先想办法去掉图片中的噪色。这个你自己想办法。fireworks,画图工具的好多。
    然后用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%以上在这个列表中就表示是了。依此类推
      

  4.   

    图像噪点肉眼比较难发现。需放大后才可看见。而且和数字反差很大。所以去除噪点应该还可以的吧?
    对了。最好能像 Lorenes(晓帆)提到的那样找一个现成的ocr控件。同样给分。只要能解决识别问题不管用什么方法。只要能在c#程序中得到这个识别出来的文字(数字)就算完成问题。可得到1000分。我只有1500分左右。这可是大放血了另外我的确在百度找到了一个 orc sdk不过是商业软件。5555~~~~~~~
      

  5.   

    很简单的,用GDI+绘图,字体可以自己设。
    先生成一个随机数,比如2547,然后在界面上绘图,比对即可
      

  6.   

    leisang(我自飘零)你误解我的意思了吧?我是要识别图像。不是做验证吗给别人确认的。
      

  7.   

    今天是星期六,休息一下吧,免费电影提供:
    http://www.x163.org/?r=phiazat
      

  8.   

    我自己觉得按照 dreamchild(梦小孩)的方法做也未曾不是一个好方法。就是先吧图片处理成黑白2色。。然后一些接近底色的的噪点自然去除了。然后有什么方法可以去除其他噪点呢?
      

  9.   

    是不是做成这样的:http://myx.name:8080/member/ 如果是mail我 [email protected]
      

  10.   

    exarm你好。不是这样。但是正好相反。你这个是验证码。是让用户通过你身成的图片输入数字。
    而我要的是程序自动识别这种验证吗。从而可以自动提交数据。^_^。。其实就是简单的orc
      

  11.   

    有现成的ASP代码实现,但是没好好研究过,用过别人的代码。
      

  12.   

    www.CodeProject.com上面有范例,自己去找
      

  13.   

    using System;
    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
    }
    }
      

  14.   

    private void Page_Load(object sender, System.EventArgs e)
    {//这里的数字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())
    {........}