这是年少的我的第一篇博客啊~~~
下图文字识别的工作流程。主要用到OpenCV4JAVA的图像处理功能与Tesseract的文字识别库。
通过图像处理、文字识别两个步骤后,接下来我们要进行的是APP的UI界面刷新,这个过程通过定义一个handler来handleMessage实现,因为android的UI更新只能在主线程里操作,并且文字处理由于时间过长需要在另外的线程里处理,所以只能通过android的这个通知刷新机制来实现。
下面是每一步的细节。
灰度图
灰度图(Gray Scale Image)又称灰阶图,它是指把白色与灰色按对数关系分为若干等级,称作灰阶。灰度分为256阶,用灰度表示的图像称为灰度图。
任何颜色都由三种原色组成,红色、蓝色、绿色。表示为 RGB(R,G,B)。每个颜色通道有256阶,当三个颜色通道的值均相等时,这就是一个灰阶,从此可以得出灰度可以分为256阶。由于每个点的色值可以是256的3次方约1677万种可能,所以一张三通道图片的数据量是十分浩大的,这对与程序处理极为不利,需要耗费极长的时间。但是对原图灰度化之后,一个点的色值只有256种可能,瞬间缩小工作量,而且过滤的色值对于我们课题也是并无大用的,因为文字识别一般都建立在白纸黑字的基础之上。采用灰度图,可以使得我们文字识别的算法在时间上变得可能。图2.1展示的是灰度图与原图的对比。左图为灰度图,右图为原图。从图中我们可以看出来,灰度化效果比较理想。
本课题灰度化使用的方法是OpenCV里的cvtColor(Matsrc, Mat dst, int code);
src:输入待处理的图片;
dst:输出处理后的图片;
code:颜色区域,表示从什么颜色转换成目标颜色,本课题此处用的是Imgproc.COLOR_RGB2GRAY;
二值图
二值图是作为图像处理最常用的图。二值图像是指每个像素不是黑就是白,其灰度值没有中间过渡的图像。二值图像一般用来描述文字或者图形,其优点是占用空间少,缺点是,当表示人物,风景的图像时,二值图像只能描述其轮廓,不能描述细节。这时候要用更高的灰度级。二值图像是每个像素只有两个可能值的数字图像。人们经常用黑白、B&W、单色图像表示二值图像,但是也可以用来表示每个像素只有一个采样值的任何图像,例如灰度图像等。二值图的图像中所有的像素点只能从0和1中