我希望在OpenCV中使用Tesseract检测复杂背景中的文本,例如此文本。我应该怎么做这个任务?
答案 0 :(得分:1)
查看Detect white characters on black background using Tesseract的答案。答案参考了一篇描述如何以独立于背景的方式识别文本的论文。
T. Kasar,J。Kumar和A. G. Ramakrishnan撰写的论文以及由Jason Funk实施的算法由多个阶段组成。在第一阶段,使用Canny对每个通道(R,G,B)执行边缘检测。然后使用bitwise_or将这些边缘组合成灰度图像。
接下来我们找到轮廓。关键点是字母及其边界框的轮廓遵循一定的规则(例如,轮廓是封闭的,纵横比是合理的,边界框不是很大(页面大小)或小(像素大小),可能的数量内部边缘是已知的 - 大多数字母为0,“o”为1,“8”和“B”为2。因此,您筛选边界框并保留遵循规则的那些框。然而,每个边缘产生两个轮廓,一个在外部,一个在内部。我仍然不确定我的逻辑是否合适。
在任何情况下,您保留的盒子都包围着字母及其内部空间。前景强度只是通过跟踪与源图像中的框相关联的轮廓轮廓获得的平均强度。背景强度是在对源图像中的边界框的四个角周围的像素进行采样时获得的中值强度。如果前景强度小于背景强度,则前景色为黑色;否则,前景色为白色。请记住,这是为每个边界框完成的。
因此,对于每个边界框,我们基于将源图像中每个像素的强度与该边界框的前景强度进行比较来对结果进行着色。根据此比较,确定像素是前景或背景的一部分。
我认为这种方法很合理,但细节有点棘手。