栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

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


/// 
/// 提取出该图片内的字符(将进过灰度处理的图片转化为0、1的二位数组)
/// 
/// 图片来源
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, imageHeight, imageWidth, BinaryWidth1, BinaryHeight1, '1');
    findWord(charArray, char2, imageHeight, imageWidth, BinaryWidth2, BinaryHeight2, '2');
    findWord(charArray, char3, imageHeight, imageWidth, BinaryWidth3, BinaryHeight3, '3');
    findWord(charArray, char4, imageHeight, imageWidth, BinaryWidth4, BinaryHeight4, '4');
    findWord(charArray, char5, imageHeight, imageWidth, BinaryWidth5, BinaryHeight5, '5');
    findWord(charArray, char6, imageHeight, imageWidth, BinaryWidth6, BinaryHeight6, '6');
    findWord(charArray, char7, imageHeight, imageWidth, BinaryWidth7, BinaryHeight7, '7');
    findWord(charArray, char8, imageHeight, imageWidth, BinaryWidth8, BinaryHeight8, '8');
    findWord(charArray, char9, imageHeight, imageWidth, BinaryWidth9, BinaryHeight9, '9');
    findWord(charArray, charA, imageHeight, imageWidth, BinaryWidthA, BinaryHeightA, 'a');
    findWord(charArray, charB, imageHeight, imageWidth, BinaryWidthB, BinaryHeightB, 'b');
    findWord(charArray, charC, imageHeight, imageWidth, BinaryWidthC, BinaryHeightC, 'c');
    findWord(charArray, charD, imageHeight, imageWidth, BinaryWidthD, BinaryHeightD, 'd');
    findWord(charArray, charE, imageHeight, imageWidth, BinaryWidthE, BinaryHeightE, 'e');
    findWord(charArray, charF, imageHeight, imageWidth, BinaryWidthF, BinaryHeightF, 'f');
    findWord(charArray, charP, imageHeight, imageWidth, BinaryWidthP, BinaryHeightP, 'p');
    findWord(charArray, charY, imageHeight, imageWidth, BinaryWidthY, BinaryHeightY, 'y');
    //------------------------------------END---------------------------------------------
    richTextBoxLicense.Text += identifySort();  //执行identifySort方法,将我需要的格式在richTextBoxLicense文本框中显示
    richTextBoxLicense.SelectionStart = richTextBoxLicense.TextLength;  //将光标移到最后面
  }
  catch { }
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/125671.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号