标签:
使用了开源的特征库(需要存放到手机sd卡根目录下);在摄像机预览状态下获取扫描手机号框框区域内的图片bitmap对象,交给开源代码识别数字,识别出来的数字进入手机号的正则表达式匹配
在识别手机号的过程中,为了增加识别率:可以参照的文章有:http://www.oschina.net/code/snippet_1422728_34167 楼主使用c语言写的
1 /* 2 * 开发思路:图片灰度处理,二进制,然后和图片中的字二进制库精确对比 3 * 4 * 获取字库:通过下面代码中generateLicense(Bitmap singlepic)方法获得,具体操作: 5 * 从图片中截图出(抠出)一个字符,然后处理得到二维的二进制矩阵,比如下面的字符1对应的二维矩阵 6 * 00000 7 * 00100 8 * 11100 9 * 00100 10 * 00100 11 * 00100 12 * 00100 13 * 00100 14 * 00100 15 * 11111 16 * 00000 17 * 00000 18 * 19 * 注意:【相同字符,比如1,不同字体,字号,不同缩放大小的图片,获得到的二位矩阵中0、1排列和数量都是不同的! 20 * 故按照此方法来写出匹配所有字的话,那字库就大了。。。】 21 */ 22 /// <summary> 23 /// 提取出该图片内的字符(将进过灰度处理的图片转化为0、1的二位数组) 24 /// </summary> 25 /// <param name="singlepic">图片来源</param> 26 public void generateLicense(Bitmap singlepic) 27 { 28 try 29 { 30 char[,] charArray = new char[singlepic.Height, singlepic.Width]; //定义个chai型的二维数组记录每个像素上0/1的值,形成一个矩形 31 int imageWidth = 0; //记录图片的像素宽度 32 int imageHeight = 0; //记录图片的像素高度 33 int dgGrayValue = 128; //灰度值 34 Color piexl; 35 //string code = ""; //存储每个像素的0/1 36 for (int posy = 0; posy < singlepic.Height; posy++) 37 {//从上到下 38 string codeCache = ""; //存储每行的像素的0/1 39 for (int posx = 0; posx < singlepic.Width; posx++) 40 {//从左到右 41 piexl = singlepic.GetPixel(posx, posy); 42 if (piexl.R < dgGrayValue) 43 {// 如果该像素的颜色为黑色,值就为“1” 44 codeCache = codeCache + "1"; 45 } 46 else 47 {// 否则该像素的颜色为白色,值就为“0” 48 codeCache = codeCache + "0"; 49 } 50 } 51 char[] array = codeCache.ToCharArray(); //每行的0/1的值用数字保存,以便于进行循环处理 52 //code += codeCache + "\n"; 53 for (imageWidth = 0; imageWidth < array.Length; imageWidth++) 54 charArray[imageHeight, imageWidth] = array[imageWidth]; //通过循环将每行值转存到二维数组中 55 imageHeight++; 56 } //*********************以上代码可用来获取一个字的图片二进制数组,即字库***************************** 57 58 //开始和字库进行匹配(我的工具中只需要下面的几个字符) 59 findWord(charArray, char0, imageHeight, imageWidth, BinaryWidth0, BinaryHeight0, ‘0‘); 60 findWord(charArray, char1, imageHeight, imageWidth, BinaryWidth1, BinaryHeight1, ‘1‘); 61 findWord(charArray, char2, imageHeight, imageWidth, BinaryWidth2, BinaryHeight2, ‘2‘); 62 findWord(charArray, char3, imageHeight, imageWidth, BinaryWidth3, BinaryHeight3, ‘3‘); 63 findWord(charArray, char4, imageHeight, imageWidth, BinaryWidth4, BinaryHeight4, ‘4‘); 64 findWord(charArray, char5, imageHeight, imageWidth, BinaryWidth5, BinaryHeight5, ‘5‘); 65 findWord(charArray, char6, imageHeight, imageWidth, BinaryWidth6, BinaryHeight6, ‘6‘); 66 findWord(charArray, char7, imageHeight, imageWidth, BinaryWidth7, BinaryHeight7, ‘7‘); 67 findWord(charArray, char8, imageHeight, imageWidth, BinaryWidth8, BinaryHeight8, ‘8‘); 68 findWord(charArray, char9, imageHeight, imageWidth, BinaryWidth9, BinaryHeight9, ‘9‘); 69 findWord(charArray, charA, imageHeight, imageWidth, BinaryWidthA, BinaryHeightA, ‘a‘); 70 findWord(charArray, charB, imageHeight, imageWidth, BinaryWidthB, BinaryHeightB, ‘b‘); 71 findWord(charArray, charC, imageHeight, imageWidth, BinaryWidthC, BinaryHeightC, ‘c‘); 72 findWord(charArray, charD, imageHeight, imageWidth, BinaryWidthD, BinaryHeightD, ‘d‘); 73 findWord(charArray, charE, imageHeight, imageWidth, BinaryWidthE, BinaryHeightE, ‘e‘); 74 findWord(charArray, charF, imageHeight, imageWidth, BinaryWidthF, BinaryHeightF, ‘f‘); 75 findWord(charArray, charP, imageHeight, imageWidth, BinaryWidthP, BinaryHeightP, ‘p‘); 76 findWord(charArray, charY, imageHeight, imageWidth, BinaryWidthY, BinaryHeightY, ‘y‘); 77 //------------------------------------END--------------------------------------------- 78 richTextBoxLicense.Text += identifySort(); //执行identifySort方法,将我需要的格式在richTextBoxLicense文本框中显示 79 richTextBoxLicense.SelectionStart = richTextBoxLicense.TextLength; //将光标移到最后面 80 } 81 catch { } 82 }
标签:
原文地址:http://www.cnblogs.com/liyanli-mu640065/p/5649591.html