我正在制作一个 Android 应用程序来检测数独谜题并找到相同的答案。在第一部分中,我需要从给定图像中提取数独。我成功地使用 HoughLinesP 找到了包含框(数独),但由于图像中存在粗线,正在生成大量线条。我需要将属于同一“粗线”的 houghLines 合并为一行,但我无法这样做。到目前为止我的代码:
Mat inputMat = new Mat(inputBitmap.getHeight(), inputBitmap.getWidth(), CvType.CV_8UC1);
Utils.bitmapToMat(inputBitmap, inputMat, false);
Mat grayMat = new Mat();
Imgproc.cvtColor(inputMat, grayMat, Imgproc.COLOR_BGR2GRAY);
Mat blurMat = new Mat();
Imgproc.blur(grayMat, blurMat, new Size(1, 1));
Mat cannyEdges = new Mat();
Imgproc.Canny(blurMat, cannyEdges, 50, 200);
Mat lines = new Mat();
Imgproc.HoughLinesP(cannyEdges, lines, 1, Math.PI / 180, 150);
List<double[]> horizontalLines = new ArrayList<>();
List<double[]> verticalLines = new ArrayList<>();
for(int i = 0 ; i < lines.cols() ; i++) {
double[] line = lines.get(0, i);
double x1 = line[0];
double y1 = line[1];
double x2 = line[2];
double y2 = line[3];
if (Math.abs(y2 - y1) < Math.abs(x2 - x1)) {
horizontalLines.add(line);
} else if (Math.abs(x2 - x1) < Math.abs(y2 - y1)) {
verticalLines.add(line);
}
}
所以,从技术上讲,我需要 10 条水平线和 10 条垂直线。PS:只有数独在视图中,即图像中没有其他线条,只有普通的数独。请帮我解决这个问题,非常感谢您的时间:)