opencv - 检测带有内部元素的纸张上的矩形

时间:2018-04-10 09:30:06

标签: opencv opencv3.0 opencv-contour

所以我试着阅读下面的图片。Image

我能够制作自适应阈值并检测旋转角度(我不确定是否必须旋转图像)

binarized

我正在努力的是检测包含表单的矩形。我尝试了不同的方法,比如opencv的findContours()。它能够找到的最大轮廓是一个带名字的盒子。

之后我决定使用HoughLinesP,但它找到了很多行,我不知道如何过滤它们。检测矩形以校正表格也很方便,之后我将能够轻松地阅读答案。 所以我已经在考虑在角落添加黑色方形标记了。但也许有人可以给我一些如何正确做到的想法。

HoughLinesP(我使用nodejs,但我可以阅读python和c ++):

(function() {
    let inputs = document.querySelectorAll("#register-form div input");

    for (let input in inputs) {
        if(inputs.hasOwnProperty(input)) {
            let current = inputs[input];

            current.setCustomValidity(current.dataset.customError);

        }
    }
})();

HoughLinesP

1 个答案:

答案 0 :(得分:1)

好的,所以我能够通过扩张来检测矩形:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$    $1.php    [L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

最大轮廓代码:

  let {area, contour} = getMaxContour(gray);

  let dilateIterations = 0;

  const MAX_DILATE_ITERATIONS = 9;
  while(area<MINIMAL_POSSIBLE_AREA && dilateIterations<MAX_DILATE_ITERATIONS){
    dilateIterations++;
    gray = gray.dilate(new cv.Mat(), new cv.Point(-1,-1), 1, cv.BORDER_CONSTANT);

    let result = getMaxContour(gray);
    contour = result.contour;
    area = result.area;

    if(DEBUG) {
      writeImage(`dilated_${dilateIterations}.png`, gray);
    }
  }

corners

之后,我能够突出角落并进行进一步的视角修复。