认识到Java中的图像中的数字(Recognizing numbers in an image in

2019-08-16 22:20发布

我想下面的图像中识别数字

我目前正在使用Tess4J库在Eclipse的Java项目,但它只能识别在一个平面彩色背景的人物。 对于此图像它甚至不能确定有这个图片上的字符(数字)。 帮我找到一个方法来完成这个任务。

这里是我当前的代码:

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

Answer 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是一种可能性这里,重新所有你需要的是在高值的阈值,与基本形态闭,完成线(因为在你的榜样的线不延伸到图像的边缘)在一起。 相反,这里使用的形态关闭的,你可以使用检测霍夫或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 *)

这里所用的工具都非常简单,几乎任何图像处理库会向他们提供。 也有可能采取更稳健的方式,但对于给定的图像是不需要的。



文章来源: Recognizing numbers in an image in java