在java中识别图像中的数字

在java中识别图像中的数字,java,image-processing,ocr,tesseract,Java,Image Processing,Ocr,Tesseract,我想识别下图中的数字 我目前正在EclipseJava项目中使用Tess4J库,但它只识别平面颜色背景中的字符。对于此图像,它甚至无法识别此图像上是否有字符(数字)。帮我找到完成这项任务的方法 这是我目前的代码: import net.sourceforge.tess4j.*; import java.io.File; public class Main { public static void main(String[] args) { File imageFile =

我想识别下图中的数字

我目前正在EclipseJava项目中使用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()); 
    } 
  } 
}
如果有办法计算由黄线分隔的正方形


谢谢

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

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] &]


这里使用的工具非常简单,几乎任何图像处理库都会提供这些工具。也可以采取更稳健的方法,但对于给定的图像,不需要它。

您应该发布一些示例代码,说明如何使用Tess4J库。这没什么大不了的。将.jar文件和.dll文件导入到项目中,并创建
Tesseract
实例<代码>导入net.sourceforge.tess4j.*;导入java.io.File;公共类Main{public static void Main(String[]args){File imageFile=new File(“image.png”);Tesseract实例=Tesseract.getInstance();try{String result=instance.doOCR(imageFile);System.out.println(result);}catch(TesseractException e){System.err.println(e.getMessage();}}}可能是因为您使用的库功能不是很强大(我对图像处理一无所知).是的。Mee也需要帮助。谢谢。我想你必须增加图像的对比度,使纯白保持白色,其他颜色变暗,然后再输入OCR。这正是我想要的。谢谢。
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 *)