我有这样的图像(白色背景和黑色文字)。如果没有噪音(如您所见:数字线的顶部和底部有很多噪音),Tesseract可以识别数字非常好。
但是当有噪音时,Tesseract会尝试将其识别为数字并为结果添加更多数字。真的很糟糕。如何使Tesseract忽略噪音?我无法制作预处理图像,使其更具对比度或清晰文本。这没什么用。
如果某些工具可以仅高亮显示字符串线。它对Tesseract来说可能是非常好的输入。请帮我。谢谢大家。
答案 0 :(得分:3)
您应该尝试eroding and dilating:
最基本的形态学操作是两个:侵蚀和膨胀。 它们有广泛的用途,即:
消除噪音
...
答案 1 :(得分:2)
您可以尝试对二进制图像进行下采样并再次对其进行采样(pyrDown
和PyrUp
),或者您可以尝试使用高斯模糊smooth
图像。并且,正如已经建议的那样,erode
和dilate
您的形象。
答案 2 :(得分:1)
我看到了3个问题的解决方案:
erode
和dilate
或某种模糊。这是最简单的解决方案。findContours
函数),然后删除区域小于某个值的所有轮廓(尝试不同的值,你应该找到非常快的正确值)。请注意,该值可能不是恒定的 - 例如,您可以尝试使用80%的平均轮廓区域(只需添加所有轮廓区域,将其除以轮廓数并乘以0.8)。T
和B
II。在数组的所有元素中添加一个索引位于B.y
和T.y
之间的元素。 (所以如果B =(1,4)和T =(3,11)则将一个加到数组[4],数组[5],数组[6] ...,数组[11])。
找到数组的最大元素。我们将此值命名为v
。 B.y <= v <= T.y
应为字母,其他轮廓 - 噪音的所有轮廓。答案 3 :(得分:1)
您可以使用图像处理技术(蚀刻和扩张等形态操作)轻松移除这些噪音,您可以选择opencv进行此操作。
答案 4 :(得分:0)
连接组件标签....即blob计数....所有剂量噪声永远不能匹配数字的大小....使用形态学技术,数字也会被修改...标记图像.. .count每个标记区域中的像素数并设置一个阈值(您可以轻松设置,因为您只有数字和噪音)... cvblob是用C ++编写的库代码googles ...
答案 5 :(得分:0)
我有类似的问题:小的噪音是tesseract失败的原因。我无法使用open-cv,因为我在android上开发了一些功能,而open-cv则因为它的尺寸太大而变得多余。我不知道这种解决方案是否很好,但这就是我所做的。
我在图像中找到了所有黑色区域(将每个区域的点添加到自己的区域集中)。然后,我检查该区域中的点数是否大于某个阈值,例如10、25和50。如果为true,则将该区域中的所有点都设为白色。