我想下面的图像中识别数字
我目前正在使用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
如果你的形象代表,那么所有你需要的第一步是在接近最大值,随后小部件丢弃阈值的二值化。
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 *)
这里所用的工具都非常简单,几乎任何图像处理库会向他们提供。 也有可能采取更稳健的方式,但对于给定的图像是不需要的。