Sat*_*rar 1 java ocr tesseract image-processing
我想识别下图中的数字

我目前在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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果有办法计算黄线分隔的方块.
Thank you
如果您的图像具有代表性,那么您作为第一步所需要的只是在接近最大值的阈值处进行二值化,然后丢弃小组件.
f = Import["http://i.stack.imgur.com/6AXwH.jpg"]
step1 = SelectComponents[Binarize[ColorConvert[f, "Grayscale"], 0.9],
"Count", #1 > 100 &]
Run Code Online (Sandbox Code Playgroud)

现在,如果您知道数字不能太高或太薄(这取决于图像尺寸),那么您可以根据其边界框过滤剩余的组件.
SelectComponents[step1, "BoundingBox",
And[10 < #[[2, 1]] - #[[1, 1]] < 100, 50 < #[[2, 2]] - #[[1, 2]] < 100] &]
Run Code Online (Sandbox Code Playgroud)

要分隔每个区域,您可以考虑使用颜色空间,其中有一个专用于黄色的通道.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 *)
Run Code Online (Sandbox Code Playgroud)

这里使用的工具非常简单,几乎任何图像处理库都会提供它们.还有更强大的方法可以采取,但对于给定的图像,它是不需要的.
| 归档时间: |
|
| 查看次数: |
6479 次 |
| 最近记录: |