java – 清理图像以帮助在Android上进行tesseract

我正试图从数独板中提取数字.在检测到电路板,它的角落和变形后,我留下了一个只有电路板的漂亮的排列图像.
现在我正在尝试使用Tesseract android实现,Tess-Two来识别数字.
我将图像分成9个部分

currentCell = undistortedThreshed.submat(rect);

其中rect是围绕图像的矩形.

现在到数字识别.

有些数字,如4,它可以完美识别.一些人,大多数是6,7,8被认为是0或什么也没有.

我想通过清理currentCell图像尽可能多地帮助tesseract.此刻它看起来像这样
. (也尝试没有倒置阈值).我想摆脱白线(数独线).
我尝试过这样的事(取自here)

Imgproc.Canny(currentCell, currentCell, 80, 90);
Mat lines = new Mat();
int threshold = 50;
int minLineSize = 5;
int lineGap = 20;

Imgproc.HoughLinesP(currentCell, lines, 1, Math.PI / 180,
        threshold, minLineSize, lineGap);
for (int x = 0; x < lines.cols() && x < 1; x++) {
    double[] vec = lines.get(0, x);
    double x1 = vec[0], y1 = vec[1], x2 = vec[2], y2 = vec[3];
    Point start = new Point(x1, y1);
    Point end = new Point(x2, y2);

    Core.line(currentCell, start, end, new Scalar(255), 10);

}

但它没有画任何东西,我试着弄乱线条的宽度和颜色,但仍然没有.试图在大图像上绘制线条,在未刷新的图像上,没有任何作用..

有什么建议?

编辑

由于某种原因,它似乎找不到任何线条.
这是将图像应用于canny之后的图像,但HoughLines没有检测到任何行.尝试使用不同的HoughLines和HoughLinesP,如OpenCV文档中所示,但没有任何作用……
这些都很明显……我做错了什么?
谢谢!

解决方法:

我最终做了一些不同的事情.

我使用findContours来获得最大的轮廓,即数字.

通过使用boundingRect得到它的边界框.

使用submat和voilla提取.我只得到了数字.

不幸的是,它似乎没有任何区别.
Tesseract仍然无法正确识别数字.有时它没有给出结果,有时,在扩大数字之后它将6识别为0.
但这是另一个问题的问题.

上一篇:【HDU 2196】 Computer (树形DP)


下一篇:HttpClient 传输文件的两种方式