C#识别出图片里的数字和字母识别出图片里的数字和字母
一个图片识别小工具,原先主要是识别以前公司的软件注册码截图里的数字和字母(每次要一个一个框复制出来粘贴到注册器
里,很麻烦!),因为注册码出现的字母和数字基本就那几个,所以识别库的范围设定的比较少。
原理和算法在代码中做了详细说明,功能存在很大的局限性,但我的想法是把这个思路和实现的办法共享出来。
源码下载地址:
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”
评论0