【问题标题】:Recognizing numbers in an image in java在java中识别图像中的数字
【发布时间】:2013-02-12 15:22:59
【问题描述】:

我想识别下图中的数字

我目前在 Eclipse Java 项目中使用 Tess4J 库,但它只能识别平面颜色背景中的字符。对于这张图片,它甚至无法识别这张图片上有字符(数字)。帮助我找到完成这项任务的方法。

这是我当前的代码:

import net.sourceforge.tess4j.*; 
import java.io.File; 

public class Main { 
  public static void main(String[] args) { 
    File imageFile = new File("image.png"); 
    Tesseract instance = Tesseract.getInstance(); 
    try { 
      String result = instance.doOCR(imageFile); 
      System.out.println(result); 
    } catch (TesseractException e) {
      System.err.println(e.getMessage()); 
    } 
  } 
}

如果有办法计算由黄线分隔的方块。

Thank you

【问题讨论】:

  • 您应该发布一些示例代码,展示您如何使用 Tess4J 库。
  • 没什么。将.jar文件和.dll文件导入项目并创建Tesseract实例; import net.sourceforge.tess4j.*; import java.io.File; public class Main { public static void main(String[] args) { File imageFile = new File("image.png"); Tesseract instance = Tesseract.getInstance(); try { String result = instance.doOCR(imageFile); System.out.println(result); } catch (TesseractException e) { System.err.println(e.getMessage()); } } }
  • 可能只是你使用的库不是很强大(我对图像处理一无所知)。
  • 是的。我在这里也需要帮助。谢谢。
  • 我认为你必须增加图像的对比度,使纯白色保持白色,而其他颜色在输入 OCR 之前变暗。

标签: java image-processing ocr tesseract


【解决方案1】:

如果您的图像具有代表性,那么第一步只需在接近最大值的阈值处进行二值化,然后丢弃小组件。

f = Import["http://i.stack.imgur.com/6AXwH.jpg"]
step1 = SelectComponents[Binarize[ColorConvert[f, "Grayscale"], 0.9], 
  "Count", #1 > 100 &]

现在,如果您知道数字不能太高或太瘦(这取决于图像尺寸),那么您可以根据边界框过滤剩余的组件。

SelectComponents[step1, "BoundingBox", 
 And[10 < #[[2, 1]] - #[[1, 1]] < 100, 50 < #[[2, 2]] - #[[1, 2]] < 100] &]

要分隔每个区域,您可以考虑使用一个色彩空间,其中有一个专用于黄色的通道。 CMYK 在这里是一种可能性,您需要的只是一个高值的阈值,以及完成线条的基本形态闭合(因为在您的示例中,线条没有延伸到图像的边界)。例如,您可以使用 Hough 或 RANSAC 来检测线条,而不是在这里使用形态闭合。

rects = Closing[
  Closing[Binarize[ColorSeparate[f, "CMYK"][[3]], 0.9], 
   ConstantArray[1, {1, 15}]], ConstantArray[1, {15, 1}]] (* left image *)
Colorize[MorphologicalComponents[ColorNegate[rects]], 
 ColorFunction -> "Rainbow"]                              (* right image *)

这里使用的工具非常简单,几乎任何图像处理库都会提供它们。还可以采用更强大的方法,但对于给定的图像,它不是必需的。

【讨论】:

  • 这正是我想要的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2013-02-16
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多