我正在尝试从数独板上提取数字。在检测到电路板、它的角和变换之后,我只剩下一张漂亮的电路板图像。 现在我正在尝试使用 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。 但这是另一个问题的问题。
关于java - 清洁图像以帮助在 Android 上进行 tesseract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541660/