减少噪音,同时检测网络摄像头中的线路

时间:2019-01-12 13:24:17

标签: opencv image-processing computer-vision

我正在尝试实现一个在线文档扫描仪,该扫描仪会自动检测矩形的边缘并在矩形区域足够大时拍照。我在opencvjs中实现了以下管道:

  // Grayscale image
  var imgray = new cv.Mat();  
  cv.cvtColor(srcMat, imgray, cv.COLOR_RGBA2GRAY, 0);
  // Blurring
  let blurred = new cv.Mat();
  let ksize = new cv.Size(7, 7);  
  cv.GaussianBlur(imgray, blurred, ksize, 0, 0, cv.BORDER_DEFAULT);
  // Canny
  var canny = new cv.Mat(); 
  low_threshold = 50;
  high_threshold = 100;
  cv.Canny(blurred, canny, 50, 150, 3, false);

  // Hough
  rho = 1  // distance resolution in pixels of the Hough grid
  theta = Math.PI / 180  // angular resolution in radians of the Hough grid
  threshold = 2  // minimum number of votes (intersections in Hough grid cell)
  min_line_length = 100  // minimum number of pixels making up a line
  max_line_gap = 10  // maximum gap in pixels between connectable line segments
  let lines = new cv.Mat();

  // Run Hough on edge detected image
  // Output "lines" is an array containing endpoints of detected line segments  
  cv.HoughLinesP(canny, lines, rho, theta, threshold, min_line_length, max_line_gap);

  // draw lines
  for (let i = 0; i < lines.rows; ++i) {
    let startPoint = new cv.Point(lines.data32S[i * 4], lines.data32S[i * 4 + 1]);
    let endPoint = new cv.Point(lines.data32S[i * 4 + 2], lines.data32S[i * 4 + 3]);
    cv.line(canny, startPoint, endPoint, new cv.Scalar(255, 255, 255, 0), 5);
  }
  document.getElementById("lines").textContent=lines.rows;  
  imgray.delete();
  blurred.delete();
  lines.delete();
  return canny;

结果就是您在视频片段中看到的内容: enter image description here

问题是,尽管Canny处理的边缘相当“稳定”,但HoughLinesP检测到的线的位置连续变化,因此不容易跟踪。我哪里错了?您可以建议对此管道进行一些增强吗?

0 个答案:

没有答案
相关问题