数字的格式都在图里了,以前没有做过类似的开发,所以只好直接求源码了。

解决方案 »

  1.   

    找了一篇类似的文章1,不用说肯定是findWindow 找斗地主窗口句柄,然后    insertfrm := TFrmInsert.CreateParented(DDZhwd);//可以实现把窗口插入到游 戏面板中了
    2, GetWindowRect(DDZhwd, DDZr);//获得斗地主场景图片
    //开始获取QQ斗地主界面图片
    DDZWorkbitmap := TBitmap.Create; //创建内存存储斗地主界面图片,用来分析象素点
    DDZhdc := GetWindowDC(DDZhwd); //获取界面设备场景
    CanvasCource := TCanvas.Create;
    CanvasCource.Handle := DDZhdc;
    DDZWorkbitmap.Width := DDZr.Right - DDZr.Left; //斗地主界面距离
    DDZWorkbitmap.Height := DDZr.Bottom - DDZr.Top;
    DDZWorkbitmap.Canvas.CopyRect(DDZWorkbitmap.Canvas.ClipRect, CanvasCource, DDZR); //copy斗地主界面场景3,以上是关键代码,接下来就是捕捉象素点了,大家如果仔细察看下扑克牌会发现,扑克牌的边框都是clblack的,大概明白了吧,然后是 如何识别是什么牌,如果仔细研究下就会发现不同的牌肯定会有一个象素点是区别于其他牌的因此就可以捕捉到了牌就可以实现记牌的功能了
    象素点可以用 DDZWorkbitmap.Canvas.Pixels[210, 595] 获取具体看帮助
      

  2.   

    这种背景很深的,得把背景去掉才行,直接ocr,啥也得不到
      

  3.   

    6楼说的也对,二值化以后取反,然后做ocr也可以得到数字,更简单,毕竟你这个是打印体。
      

  4.   

    这几天我也在弄这个东西,只是游戏不一样。我的思路是这样的:
    1.把图像二值化,这个过程中的难点在于找阀值;
    2.对图像进行纵横投影,确定字符所在的区域以及字符的宽、高度以及字符数量,这个过程为后续的字符切割做准备;
    3.对切割以后的字符进行归一化,不过如果只想取一个区域的字符,不想应用范围更广泛的话,这一步可以省略,比如有些区域的数字高一些,宽一些(虽然字体一样),有些区域的数字小一些,窄一些;
    4.取字符的特征码,把二值化以后的黑底、白字的部分分别用0和1表示成字符串;
    5.对已经存在的字符串模板进行匹配,取相似度,相似度最高的就判断为相同;
    6.输出;以上这些不懂的话可以看一本书,书名好像叫“DELPHI 图像......”啥的,具体忘记了,不过网上很好找,有PDF的版本。
      

  5.   

    难道这不是D3吗  源码真是不想写
    你没必要做成图片识别,这样难度很高,除非有现成ocr 
    你可以做的是文字抓取,就像金山词霸屏幕取词,就是拦截几个api 
    TextOut,TextOutA 等等
    有很多例子可参考的。