• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#识别出图片里的数字和字母

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#字母转数字,c#大小写字母转换,c#获取汉字首字母,c#判断是否为字母,c#中字母比较大小等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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

源码下载地址:
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, 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 { }
}
</div>

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#识别出图片里的数字和字母
  • C#将字母或数字加密成字母的方法

相关文章

  • 2017-05-28c#和avascript加解密之间的互转代码分享
  • 2017-05-28解析C#中用Process类杀死进程,执行命令的深入分析
  • 2017-05-28C#中Ilist与list的区别小结
  • 2017-05-28C#实现窗体间传递数据实例
  • 2017-05-28C#实现动态显示及动态移除图片方法
  • 2017-05-28解析在内部循环中Continue外部循环的使用详解
  • 2017-05-28winform拦截关闭按钮触发的事件示例
  • 2017-05-28基于C#编写经理评分系统
  • 2017-05-28C#托管堆对象实例包含内容分析
  • 2017-05-28C#在后台运行操作(BackgroundWorker用法)示例分享

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 完成OSS.Http底层HttpClient重构封装 支持标准库
    • C#中常量和只读变量的区别小结
    • c# dataTable 合并两个列到一个新列中的简单实例
    • C#接口实现方法实例分析
    • C#从画刷创建画笔的方法
    • C#实现将窗体固定在显示器的左上角且不能移动的方法
    • C#数据结构与算法揭秘一
    • C#索引属性用法实例分析
    • C#字符串的截取函数用法总结
    • C#邮件定时群发工具Atilia用法实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有