java - 清洁图像以帮助在 Android 上进行 tesseract

标签 java android opencv javacv

我正在尝试从数独板上提取数字。在检测到电路板、它的角和变换之后,我只剩下一张漂亮的电路板图像。 现在我正在尝试使用 Tesseract android 实现 Tess-Two 来识别数字。 我将图像分成 9 部分

currentCell = undistortedThreshed.submat(rect);

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

现在是数字识别。

有些数字,比如 4,它可以完美识别。一些,主要是 6、7、8 被识别为 0 或什么都没有。

我想通过清理 currentCell 图像来尽可能多地帮助 tesseract。目前它看起来像这样 Inverted 6 . (也尝试不使用倒置阈值)。我想摆脱白线(数独线)。 我试过这样的事情(取自 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 后图像的样子 6 after canny但是 HoughLines 没有检测到任何线条。尝试使用不同值的 HoughLinesHoughLinesP,如 OpenCV 文档中所示,但没有任何效果...... 那些是非常明显的线条..我做错了什么? 谢谢!

最佳答案

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

我使用findContours 得到最大的轮廓,也就是数字。

使用boundingRect得到它的边界框。

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

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

关于java - 清洁图像以帮助在 Android 上进行 tesseract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541660/

相关文章:

java - 尝试使用正在运行的 Web 应用程序中的 CDI 实例化 bean

java - 获取 NoSuchMethodError :javax. servlet.ServletContext.getVirtualServerName()

java - 为什么 CompletableFuture.runAsync() 并不总是提交给 ForkJoinPool.commonPool()?

c++ - XIMEA:openCV 2.4.9 无法找到 Ximea 相机,尽管它可以与其他程序一起正常工作

OpenCV垫CV_32FC1

java - 用 Java 扫描 PDF

java - 为什么我添加到项目中的计时器类在单击按钮时没有启动?

android - Viewpager 和 FragmentPagerAdapter : Page view removal

python - 根据时间函数绘制图像 rgb 值

android - 三星 S2 GT I9100 中未调用 deviceready