如何添加对角概率霍夫线

Posted

技术标签:

【中文标题】如何添加对角概率霍夫线【英文标题】:How to add diagonal probabilistic hough lines 【发布时间】:2017-07-23 20:00:45 【问题描述】:

在我的代码中,我仅通过 HoughLinesP (OpenCV) 检测垂直线。这是一个截断输出的示例:

它曾经是一扇门,然后我应用了精明算法。通过仅设置 90 度角,将仅检测到垂直线(红色线)。但现在我想在门上方的这个小部分添加绿线。

角度计算如下:

    double angle = atan2(ppt2.y - ppt1.y, ppt2.x - ppt1.x) * 180.0 / CV_PI;
    if (angle) 
        line(cdst, ppt1, ppt2, Scalar(0, 0, 255), 2, CV_AA);
    

那么我怎样才能另外检测到绿色呢?尤其是只有门以上的那些? 谢谢!

【问题讨论】:

这是一个广泛的问题,但是,您可以看到哪些线与垂直线相交。还取决于您的HoughLinesP() 是否具有正确的参数来检测这些行,即足够大的 rho、最小计数等。如果您认为这可行,请告诉我,我可以详细说明问题 @GrayCygnus 我的HoughLinesP() 看起来像这样HoughLinesP(dst, lines, 1, CV_PI / 2, 66, 50, 150); 实际上如果我增加rho 参数,会有更多的行,不是吗?这不是我的目标。但也许你现在可以通过我给定的参数来帮助我? 在您的代码中,if (angle) 做了什么?似乎拒绝非常非常非常精确的水平线,为什么要这样做? @barny 正如我的第一句话所说,我拒绝所有水平线只获得垂直线。 “精确拒绝水平线”与“只得到垂直线”不太一样——两者之间有 88 度角。 【参考方案1】:

您的结果仅显示垂直线,虽然是的,但您正在拒绝精确的水平线,您可能需要查看该测试实际删除的内容。同样拒绝水平线与仅接受垂直线不同,我认为在这种情况下,您基本上只能从 HoughLinesP 获取垂直线。

无论如何,要检测到更多对角线,您必须从 pi/2 更改 HoughLinesP theta 参数:

HoughLinesP(dst, lines, 1, CV_PI / 2, 66, 50, 150);

例如:

HoughLinesP(dst, lines, 1, CV_PI / 180.0, 66, 50, 150);

然后你可能需要让你的角度拒绝更健壮/复杂,以拒绝奇怪的角度线以及由 atan2 返回的精确 0.000000000000 弧度线,无论如何它似乎对例如更有弹性。图片角度的微小变化,以检查一系列角度,例如+/-0.01

【讨论】:

不幸的是,如果我使用你的例子,我到处都有对角线,不仅在那些特定的部分.. 你说你想要对角线,你有负载,所以我回答了你的问题 - 所以我希望你能投票并接受我的回答。现在,正如我在回答中所说,您可能需要调整 HoughLinesP 参数,也许还需要调整角度过滤器来选择您需要的内容。我不知道您需要什么,如果您需要帮助,那可能是另一个问题。 这是某种作业吗?说实话。 不,不是。但我已经自己想通了。不管怎样,谢谢。 :) 不幸的是,我创建了另一个解决方案。但无论如何,谢谢你的努力!

以上是关于如何添加对角概率霍夫线的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV探索之路:霍夫变换

opencv —— HoughLinesHoughLinesP 霍夫线变换(标准霍夫线变换多尺度霍夫线变换累积概率霍夫线变换)

线段检测器与概率霍夫变换

标准霍夫变换识别粗直线

标准霍夫变换识别粗直线

OpenCV实战(14)——图像线条提取