Android_openCV图片处理

一、改变图片像素

问题1:
通常情况下,图片的像素值越大分辨率也就越高,那么图像也就越清晰。我们用现在的模型进行OCR文字识别时,识别率可能就越高。
上次开会公司那边给的图片中图片的像素值都很大,我用了一张像素值为9000x12000的图片,发现在用我们的模型进行识别时,下面比较模糊的文字(人眼都看得不是很清除的)都能正确识别。如下图
Android_openCV图片处理_第1张图片

解决问题1:
通过上面的问题分析,我就去尝试将我们要识别文字的图片像素都调大(测试值9000x12000)让图片更清晰,以此来提高ocr识别率。特别针对带阴影的图片,想通过提高像素的方法来使得阴影部分的文字更清晰,更容易被识别。但通过测试,发现仍然存在部分区域没识别到。如下图
Android_openCV图片处理_第2张图片
实现代码:(调整图片像素)

Bitmap.setWidth(9000)
Bitmap.setHeight(12000)

问题2:
基于上述问题的情况,尝试将图片阴影去除。

解决问题2:
使用OpenCv来去除图片阴影。
基本思路:
1、将图片转换为灰度图。
2、将灰度图进行膨胀操作。
3、膨胀后的图再进行腐蚀操作。
4、先膨胀后腐蚀的图减去原灰度图再取反。
5、将取反后的图使用归一化将白色背景修改贴近原图。
效果如下:(右图为原图;左图为去阴影后的图)
Android_openCV图片处理_第3张图片
注意:代码是用C++实现的,具体实现也是直接用的别人写好的代码(我不会C++)。在它的代码里针对它的那张阴影图片效果很好,如下图。
Android_openCV图片处理_第4张图片
可能原因是他在做处理的时候是点对点操作,也就是针对他这张图片设置代码参数等。所以在处理我的那张阴影图片时效果不好并且阴影部分的文字清晰度也降低了,并且在OCR模型上识别也存在部分区域检查不到。

问题3:图像增强

解决问题3:
使用openCV的图像增强。C++代码实现。去CSDN上找到了4种基于openCV用C++实现的方法。
1、基于直方图均衡化的图像增强。
(左上:去阴影后的图。右上:去阴影后的图增强后的效果)
(左下:原阴影图。右下:原阴影图增强后的效果)
2、基于拉普拉斯算子的图像增强。

3、基于对数Log变换的图像增强

4、基于伽马变换的图像增强

总结:对应上面像素增强、去阴影和去阴影后图像增强操作的图片在模型上ocr识别都会有部分区域检查不到,并且检查不到的区域基本上是同一个区域。所以最后觉得识别的效果与图像没太大关系,对于基本人眼能识别的文字ocr都能识别到,反而对于一些文字密集的地方可能ocr模型检查不到。

你可能感兴趣的:(opencv,计算机视觉,人工智能)