在HoughLines之前要采取哪些预处理步骤

时间:2019-03-28 09:11:44

标签: c++ opencv image-processing houghlinesp

我已经编写了一个程序

  1. 结合边缘信息和颜色信息以形成图像,我需要从中检测直线
    EdgeMap ColourMap Combined Map or Frame
  2. 然后我使用findContour和drawContour重绘证据图 Output from findcontour

  3. 之后,我使用一些细化算法将行折叠为单行 thin line

  4. 使用HoughLinesP计算线段。仅具有线迹。最重要的是错过了水平线

Output from Hough

  1. 从这组线段中,计算相交点(代码中未包含)
  2. 从相交处,从相交点绘制四边形,即水平/垂直线的顶点(称为相交点最远的顶点v1和v2),并根据该相交点在该线上的反射来计算顶点在v1和v2之间

但是,它没有按我认为的那样工作。我认为问题在于矩形的内部边界未填充。我应该使用形态学,例如扩张然后侵蚀。在尝试检测与Hough变换的交集之前,我已经没有足够的想法来对这两个“线索”图像进行预处理

需要大家的帮助!

提前致谢

下面是我的代码段,用于生成以下内容

int FindBoxes(cv::Mat& colorMap,cv::Mat& edgeMap)
{ 
    cv::Mat frame;
    // colorMap is a coloured filtered map while edgeMap is an edge  filter Map. frame will be the colour i want 
    cv::bitwise_and(colorMap, edgeMap, frame);

    // A trial method by using findContour to get the interior line filled up 
    std::vector<std::vector<cv::Point> > contours;
    std::vector<cv::Vec4i> hierarchy;
    cv::findContours(frame, contours, hierarchy, CV_RETR_EXTERNAL,
        cv::CHAIN_APPROX_SIMPLE);

    cv::Mat Map = cv::Mat::zeros(cueMap1.size(), CV_8U);
    cv::drawContours(Map, contours, -1, cv::Scalar(255, 255, 255), CV_FILLED);

   // thin the line to collapse it into one single line for Hough Detection
   cv::Mat thin;
   thinning(Map, Map);

   cv::GaussianBlur(Map, Map, cv::Size(5,5),1.0,1.0);

   std::vector<cv::Vec4i> lines;
   cv::HoughLinesP(Map, lines,1, CV_PI/90, 2, 30, 0);

   return 0;
}

0 个答案:

没有答案