c++ - 如何添加对角概率霍夫线

标签 c++ opencv opencv3.0 houghlinesp

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

enter image description here

它曾经是一扇门,然后我应用了 canny 算法。通过仅设置 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 获得垂直线。

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

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

关于c++ - 如何添加对角概率霍夫线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269377/

相关文章:

c++ - 为什么不允许使用 `make_unique<T[N]>`?

c++ - 如何在 C++ 的类构造函数中使用线程?

python - OpenCV 3 Python 3.5 python

c++ - 带有 std::variant 或 union 包装器的通用接口(interface)

python - OpenCV 2.0 与 MacPorts 的 SWIG Python 绑定(bind)

url - 我们可以使用 Opencv 通过互联网获取实时视频流吗?怎么做?

visual-studio-2010 - 使用 OpenCV2 访问 Mat 中的像素

c++ - 如何找到特定像素数对应的像素值?

opencv - 添加和提取图像元数据

c++ - 如何使用 Eclipse for mac 编译和运行 C++ 程序?