Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何自定义Tesseract忽略噪波?_C#_Opencv_Character_Ocr_Tesseract - Fatal编程技术网

C# 如何自定义Tesseract忽略噪波?

C# 如何自定义Tesseract忽略噪波?,c#,opencv,character,ocr,tesseract,C#,Opencv,Character,Ocr,Tesseract,我有一个这样的图像(白色背景和黑色文本)。如果没有噪声(如您所见:数字行的顶部和底部有许多噪声),Tesseract可以很好地识别数字 但当有噪声时,Tesseract会尝试将其识别为数字,并在结果中添加更多的数字。真的很糟糕。如何使Tesseract忽略噪波?我无法对图像进行预处理以使其更具对比度或更清晰的文本。这没有任何帮助 如果某个工具可以高亮显示,则仅显示字符串行。它可以成为Tesseract的很好的输入。请帮帮我。谢谢大家 您应该尝试: 最基本的形态操作有两种:侵蚀和扩张。 它们有广泛

我有一个这样的图像(白色背景和黑色文本)。如果没有噪声(如您所见:数字行的顶部和底部有许多噪声),Tesseract可以很好地识别数字

但当有噪声时,Tesseract会尝试将其识别为数字,并在结果中添加更多的数字。真的很糟糕。如何使Tesseract忽略噪波?我无法对图像进行预处理以使其更具对比度或更清晰的文本。这没有任何帮助

如果某个工具可以高亮显示,则仅显示字符串行。它可以成为Tesseract的很好的输入。请帮帮我。谢谢大家

您应该尝试:

最基本的形态操作有两种:侵蚀和扩张。 它们有广泛的用途,即:

消除噪音


您可以尝试对二进制图像进行向下采样,然后再次进行向上采样(
pyrDown
PyrUp
),或者尝试使用高斯模糊对图像进行平滑处理。而且,正如前面提到的,
侵蚀
扩大
你的形象。

我认为有3种解决方法可以解决你的问题:

  • 如前所述-尝试使用
    腐蚀
    扩张
    或某种模糊。这是最简单的解决办法
  • 查找所有轮廓(
    findContours
    函数),然后删除面积小于某个值的所有轮廓(尝试不同的值,您应该很快找到正确的值)。请注意,该值可能不是常数-例如,您可以尝试使用80%的平均轮廓面积(只需将所有轮廓面积相加,除以轮廓数,再乘以0.8)
  • 找到所有的轮廓。创建一维整数数组,长度等于图像高度。用零填充数组。现在针对每个轮廓:
    I.找到顶部和底部点(y坐标值最大和最小的点)。让我们把这两个点命名为
    T
    B

    二,。向索引介于
    B.y
    T.y
    之间的数组的所有元素添加一个。(因此,如果B=(1,4)和T=(3,11),则将一个添加到数组[4]、数组[5]、数组[6]…、数组[11])。

    找到数组中最大的元素。让我们把这个值命名为
    v
    。所有轮廓的
    B.y均进行连接组件标记…即斑点计数…所有剂量噪声永远无法匹配数字的大小…使用形态学技术,数字也会得到修改…标记图像…计算每个标记区域的像素数并设置阈值(你可以很容易地设置,因为你只会有数字和噪音)…CVBROB是C++编写的库,在代码Google……/P> < P>你可以很容易地使用图像处理技术(如腐蚀和膨胀等形态操作)来消除这些噪声。您可以选择opencv进行此操作。

    我也遇到了类似的问题:小噪音是导致tesseract失败的原因。我无法使用opencv,因为我在android上开发了一些功能,而opencv因其尺寸过大而不受欢迎。我不知道这个解决方案是否好,但下面是我所做的

    我在图像中找到了所有黑色区域(我添加到自己的区域集中的每个区域的点)。然后,我检查该区域中的点计数是否大于某个阈值,如10、25和50。如果为真,我将该区域的所有点置为白色