1

在我的代码中,我仅通过 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);
    }

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

4

1 回答 1

0

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

于 2017-07-24T12:27:16.717 回答