opencv检测虚线

2024-04-05

我有一个由某种虚线组成的图像:

注意:打开图像,将其放大并查看所有小点

我如何使用 openCV 来检测和参数化这些线?

该图像是机器人上激光测距扫描仪的值,我需要尽可能好地获取所有线条。


The HoughLinesP功能应该是理想的吗?

我尝试了以下代码:

    //converts laser range readings to a binary image.
    cv::Mat binaryImg = laserRangesToBinaryImage();

    cv::Mat cdst;
    cvtColor(binaryImg, cdst, CV_GRAY2BGR);

    std::vector<cv::Vec4i> lines;
    HoughLinesP(binaryImg, lines, 2, 5.0*CV_PI/180.0, 1, 2, 20 );
    for( size_t i = 0; i < lines.size(); i++ )
    {
        cv::Vec4i l = lines[i];
        line( cdst, cv::Point(l[0], l[1]), cv::Point(l[2], l[3]), cv::Scalar(0,0,255), 3, CV_AA);
    }

    cv::imshow("Hough output", cdst);

这会导致大约 50 到 60 行(在 Ubuntu 14.04 上使用 openCV 2.8.3):

这里最大的问题是存在多个分离的线段,其中应该检测整行。所以这些段没有正确连接。有些线路太短或什至未被检测到。

最佳结果应如下所示(手动创建),包含大约 20 条线段:

我怎样才能达到这个结果?


如果你还没有,请看看这个tutorial http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html.

基本上,您应该对这三个参数进行操作(最后三个参数HoughLinesP 函数 http://docs.opencv.org/modules/imgproc/doc/feature_detection.html#houghlinesp),直到达到检测到的线的正确长度:

  1. 临界点:最小交叉点数量(在霍夫空间 http://en.wikipedia.org/wiki/Hough_transform#Theory)来“检测”一条线。
  2. 最小林长:可以形成一条线的最少点数。 点数少于此数量的线将被忽略。
  3. 最大线间隙:考虑的两点之间的最大差距 同一条线。

数学形态学(closing http://en.wikipedia.org/wiki/Closing_%28morphology%29)也可以提供帮助,正如评论中提到的那样。然而,帮助将是有限的:对于这样的任务,建议使用小的 3x3 内核,因此,如果一条线上的某些像素彼此距离太远,则无论如何都不会填充间隙。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv检测虚线 的相关文章

随机推荐