我正在尝试提取扫描图像中的矩形,如下所示: 我正在使用OpenCV并关注this tutorial,我来到了这段代码
private static Mat detectLinesHough(Mat img) {
Mat lines = new Mat();
// Mat edges = new Mat();
// Imgproc.Canny(img, edges, 20, 60);
int threshold = 80;
int minLineLength = 10;
int maxLineGap = 5;
double rho = 0.4;
Imgproc.HoughLinesP(img, lines, rho, Math.PI / 180, threshold, minLineLength, maxLineGap);
Imgproc.cvtColor(img, img, Imgproc.COLOR_GRAY2RGB);
System.out.println(lines.cols());
for (int x = 0; x < lines.cols(); 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(lines, start, end, new Scalar(0, 255, 0), 3);
}
return img;
}
例如,使用上面代码中的参数,我得到以下结果:
结果不满意,所以问题是 - 如何选择参数来选择所有矩形而不是多个字母?
答案 0 :(得分:0)
我有三条建议可以改善结果:
你应该制作minLineLength&#39;尽可能高的&#39; maxLineGap&#39;尽可能低,以便找到您搜索的行。
处理线条并检查角度,因为矩形线与x轴平行或垂直。您可以丢弃不在特定角度范围内的行。
寻找角落并丢弃未连接到角落的每条线。