在我的代码中,我仅通过 HoughLinesP (OpenCV) 检测垂直线。这是剪切输出的示例:
它曾经是一扇门,然后我应用了 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/