【发布时间】:2016-09-07 04:04:20
【问题描述】:
我想在 OpenCV 中使用 Tesseract 检测复杂背景中的文本,例如这个。我应该如何完成这项任务?
【问题讨论】:
我想在 OpenCV 中使用 Tesseract 检测复杂背景中的文本,例如这个。我应该如何完成这项任务?
【问题讨论】:
查看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)。因此,您筛选边界框并保留那些遵循规则的框。然而,每条边都会产生两个轮廓,一个在外面,一个在里面。我仍然不确定我的逻辑是否正确。
无论如何,您保留的盒子围绕着字母及其内部空间。前景强度只是您通过跟踪与源图像中的框相关联的轮廓的轮廓获得的平均强度。背景强度是在对源图像中边界框四个角周围的像素进行采样时获得的中值强度。如果前景强度小于背景强度,则前景色为黑色;否则,前景色为白色。请记住,这是针对每个边界框完成的。
因此,对于每个边界框,我们根据源图像中每个像素的强度与该边界框的前景强度的比较来为结果着色。基于此比较,像素被确定为前景或背景的一部分。
我认为这种方法是合理的,但细节有点棘手。
【讨论】: