码迷,mamicode.com
首页 > 移动开发 > 详细

摄像机识别图片中的手机号

时间:2016-07-07 13:02:38      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

使用了开源的特征库(需要存放到手机sd卡根目录下);在摄像机预览状态下获取扫描手机号框框区域内的图片bitmap对象,交给开源代码识别数字,识别出来的数字进入手机号的正则表达式匹配

在识别手机号的过程中,为了增加识别率:可以参照的文章有:http://www.oschina.net/code/snippet_1422728_34167   楼主使用c语言写的

技术分享不过思路以后可以参考一下

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

bobo2cj 发布于 2014年03月17日 15时, 13评/16261阅
 
一个图片识别小工具,原先主要是识别以前公司的软件注册码截图里的数字和字母(每次要一个一个框复制出来粘贴到注册器里,很麻烦!),因为注册码出现的字母和数字基本就那几个,所以识别库的范围设定的比较少。
原理和算法在代码中做了详细说明,功能存在很大的局限性,但我的想法是把这个思路和实现的办法共享出来。
源码下载地址:
http://git.oschina.net/bobo2cj/iamge2text
标签: .Net Framework
 

1. [图片] 主界面.png    

技术分享

2. [代码]提取出该图片内的字符     

 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 }

 

3. [图片] 单个字图片对应的二维矩阵0、1码.png    

技术分享

摄像机识别图片中的手机号

标签:

原文地址:http://www.cnblogs.com/liyanli-mu640065/p/5649591.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!