我正在尝试从数独板上提取数字。在检测到电路板、它的角并进行转换后,我只剩下一个漂亮的、排列整齐的电路板图像。现在我正在尝试使用 Tesseract android 实现 Tess-Two 来识别数字。我将图像分成 9 个部分
currentCell = undistortedThreshed.submat(rect);
其中rect
是围绕图像的矩形。
现在到数字识别。
有些数字,比如 4,它可以完美识别。一些,主要是 6、7、8 被识别为 0 或什么都没有。
currentCell
我想通过清理图像来尽可能多地帮助 tesseract 。目前它看起来像这样
。(也尝试过不使用倒置阈值)。我想摆脱白线(数独线)。我试过这样的东西(取自这里)
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
没有检测到任何线条。如OpenCV文档中所示,尝试了两者HoughLines
并HoughLinesP
使用不同的值,但没有任何效果......这些都是非常明显的线条......我做错了什么?谢谢!