C#识别出图片里的数字和字母

C#识别出图片里的数字和字母,第1张

概述一个图片识别小工具,原先主要是识别以前公司的软件注册码截图里的数字字母(每次要一个一个框复制出来粘贴到注册器里,很麻烦!),因为注册码出现的字母和数字基本就那几个,所以识别库的范围设定的比较少。

一个图片识别小工具,原先主要是识别以前公司的软件注册码截图里的数字和字母(每次要一个一个框复制出来粘贴到注册器里,很麻烦!),因为注册码出现的字母和数字基本就那几个,所以识别库的范围设定的比较少。

原理和算法在代码中做了详细说明,功能存在很大的局限性,但我的想法是把这个思路和实现的办法共享出来。

源码下载地址:
http://git.oschina.net/bobo2cj/iamge2text

/* * 开发思路:图片灰度处理,二进制,然后和图片中的字二进制库精确对比 *  * 获取字库:通过下面代码中generatelicense(Bitmap singlepic)方法获得,具体 *** 作: *   从图片中截图出(抠出)一个字符,然后处理得到二维的二进制矩阵,比如下面的字符1对应的二维矩阵 *   00000 *   00100 *   11100 *   00100 *   00100 *   00100 *   00100 *   00100 *   00100 *   11111 *   00000 *   00000 *    * 注意:【相同字符,比如1,不同字体,字号,不同缩放大小的图片,获得到的二位矩阵中0、1排列和数量都是不同的! *     故按照此方法来写出匹配所有字的话,那字库就大了。。。】 *  * *//// <summary>/// 提取出该图片内的字符(将进过灰度处理的图片转化为0、1的二位数组)/// </summary>/// <param name="singlepic">图片来源</param>public voID generatelicense(Bitmap singlepic){  try  {    char[,] chararray = new char[singlepic.Height,singlepic.WIDth];  //定义个chai型的二维数组记录每个像素上0/1的值,形成一个矩形    int imageWIDth = 0;  //记录图片的像素宽度    int imageHeight = 0;  //记录图片的像素高度    int dgGrayValue = 128;  //灰度值    color pIExl;    //string code = "";  //存储每个像素的0/1    for (int posy = 0; posy < singlepic.Height; posy++)    {//从上到下      string codeCache = "";  //存储每行的像素的0/1      for (int posx = 0; posx < singlepic.WIDth; posx++)      {//从左到右        pIExl = singlepic.GetPixel(posx,posy);        if (pIExl.R < dgGrayValue)          {// 如果该像素的颜色为黑色,值就为“1”          codeCache = codeCache + "1";        }        else        {// 否则该像素的颜色为白色,值就为“0”          codeCache = codeCache + "0";                      }      }      char[] array = codeCache.tochararray();  //每行的0/1的值用数字保存,以便于进行循环处理      //code += codeCache + "\n";      for (imageWIDth = 0; imageWIDth < array.Length; imageWIDth++)        chararray[imageHeight,imageWIDth] = array[imageWIDth];  //通过循环将每行值转存到二维数组中      imageHeight++;    }    //*********************以上代码可用来获取一个字的图片二进制数组,即字库*****************************     //开始和字库进行匹配(我的工具中只需要下面的几个字符)    finDWord(chararray,char0,imageHeight,imageWIDth,BinaryWIDth0,BinaryHeight0,'0');    finDWord(chararray,char1,BinaryWIDth1,BinaryHeight1,'1');    finDWord(chararray,char2,BinaryWIDth2,BinaryHeight2,'2');    finDWord(chararray,char3,BinaryWIDth3,BinaryHeight3,'3');    finDWord(chararray,char4,BinaryWIDth4,BinaryHeight4,'4');    finDWord(chararray,char5,BinaryWIDth5,BinaryHeight5,'5');    finDWord(chararray,char6,BinaryWIDth6,BinaryHeight6,'6');    finDWord(chararray,char7,BinaryWIDth7,BinaryHeight7,'7');    finDWord(chararray,char8,BinaryWIDth8,BinaryHeight8,'8');    finDWord(chararray,char9,BinaryWIDth9,BinaryHeight9,'9');    finDWord(chararray,chara,BinaryWIDthA,BinaryHeightA,'a');    finDWord(chararray,charB,BinaryWIDthB,BinaryHeightB,'b');    finDWord(chararray,charC,BinaryWIDthC,BinaryHeightC,'c');    finDWord(chararray,charD,BinaryWIDthD,BinaryHeightD,'d');    finDWord(chararray,charE,BinaryWIDthE,BinaryHeightE,'e');    finDWord(chararray,charF,BinaryWIDthF,BinaryHeightF,'f');    finDWord(chararray,charP,BinaryWIDthP,BinaryHeightP,'p');    finDWord(chararray,charY,BinaryWIDthY,BinaryHeightY,'y');    //------------------------------------END---------------------------------------------    richTextBoxlicense.Text += IDentifySort();  //执行IDentifySort方法,将我需要的格式在richTextBoxlicense文本框中显示    richTextBoxlicense.SelectionStart = richTextBoxlicense.TextLength;  //将光标移到最后面  }  catch { }}

以上所述就是本文的全部内容了,希望大家能够喜欢。

总结

以上是内存溢出为你收集整理的C#识别出图片里的数字和字母全部内容,希望文章能够帮你解决C#识别出图片里的数字和字母所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1260948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存