一个图片识别小工具,原先主要是识别以前公司的软件注册码截图里的数字和字母(每次要一个一个框复制出来粘贴到注册器里,很麻烦!),因为注册码出现的字母和数字基本就那几个,所以识别库的范围设定的比较少。
原理和算法在代码中做了详细说明,功能存在很大的局限性,但我的想法是把这个思路和实现的办法共享出来。
源码下载地址:
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 { } }
以上所述就是本文的全部内容了,希望大家能够喜欢。
本文向大家介绍c#实现识别图片上的验证码数字,包括了c#实现识别图片上的验证码数字的使用技巧和注意事项,需要的朋友参考一下 C#识别验证码图片通用类 以上2则都是使用C#实现的orc识别的代码,希望对大家学习C#有所帮助。
问题内容: 我一直在寻找网络上图像识别数字的资源。我发现许多链接提供了有关该主题的大量资源。但不幸的是,这比提供帮助更令人困惑,我不知道从哪里开始。 我有一个带有5个数字的图像,没有打扰(没有验证码或类似的东西)。数字在白色背景上为黑色,以标准字体书写。 我的第一步是分离数字。我当前使用的算法非常简单,它只是检查一列是否完全为白色,因此是否为空格。然后,它会修剪每个字符,以使其周围没有白色边框。这
本文向大家介绍pytorch cnn 识别手写的字实现自建图片数据,包括了pytorch cnn 识别手写的字实现自建图片数据的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍了pytorch cnn 识别手写的字实现自建图片数据,分享给大家,具体如下: 图片和label 见上一篇文章《pytorch 把MNIST数据集转换成图片和txt》 结果如下: 以上就是本文的全部内容,希望对大家的学习
本文向大家介绍C#二维码图片识别代码,包括了C#二维码图片识别代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#二维码图片识别的具体代码,供大家参考,具体内容如下 怎么用NuGet和怎么配置log4net就不介绍了,直接上代码(Visual Studio 2015 下的项目,用的.NET Framework 4.5.2)。 其中QRDecodeConsoleApp.exe.co
我正在编写一个Android应用程序来从图片中提取数独谜题。对于9x9数独网格中的每个单元格,我需要确定它是包含数字1到9中的一个还是空白。我从这样的数独开始: 我使用OpenCV对数独进行预处理,以提取单个数字的黑白图像,然后将它们通过Tesseract。不过,Tesseract有几个限制: Tesseract很大,包含许多我不需要的功能(即全文识别),并且需要英语训练数据才能运行,我认为这必须