首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用HoughLinesP检测OpenCV中的水平线?

如何使用HoughLinesP检测OpenCV中的水平线?
EN

Stack Overflow用户
提问于 2014-02-20 09:51:24
回答 5查看 11.7K关注 0票数 4

我目前正在尝试使用opencv中的HoughLinesP函数检测图像中的水平样线,使用以下参数:

HoughLinesP(linMat[i], lines, 1, CV_PI/180, 80, linMat[i].cols*(0.3), 3);

其中linMat[i]是输入图像。结果是这样的

http://postimg.org/image/49b8wzlgz/

虽然这是可以的,但我想要的是水平方向的直线,如此图像中的黄线所示(这条线是手动绘制的)。

http://postimg.org/image/rh9wlueo7/

我尝试将CV_PI/180参数更改为较小的值(如CV_PI/45),并尝试对其他参数使用各种值,但不能生成水平线。

使用opencv中的HoughLinesP函数在参数中使用什么值来生成这样的黄线?

谢谢!

更新

遵照建议(谢谢大家!)我甚至尝试过非常极端的价值观

HoughLinesP(linMat[i], lines, 1, CV_PI/360, 80, 1, 1);

然而,得到的行在垂直方向的斜率是这样的: postimg.org/image/y5w6vm7lx/ (请复制-粘贴链接.)。我不使用边缘检测过滤器,如精明,因为它未能检测到较厚的线条,边缘往往是中断的线。

更新2

为了澄清起见,结果中绘制的线条如下所示(在HoughLinesP之后)

for all lines

{

line( linMat[i], Point(lines[j][0], lines[j][1]), Point(lines[j][2], lines[j][3]), Scalar(0,0,255), 1, 8 );

}

EN

回答 5

Stack Overflow用户

发布于 2014-02-20 12:57:35

简单地使用这个方程

代码语言:javascript
复制
double Angle = atan2(y2 - y1, x2 - x1) * 180.0 / CV_PI;

检查HoughLinesP()检测到的每一行的角度,并考虑角度为0或180的行。

票数 3
EN

Stack Overflow用户

发布于 2014-02-20 10:14:34

尝试将Hough应用于canny或任何其他算法的边缘输出图像,而不是在阈值图像上运行。

可以看出,较高的θ值只代表水平值。通过消除低θ值,滤除lines中的结果。

票数 2
EN

Stack Overflow用户

发布于 2014-02-20 10:24:51

根据我在文档(链接)中可以看到的内容,我认为函数HoughLinesP将检测到图像中的所有行。这些参数仅是影响检测灵敏度的阈值。

因此,如果您只想要水平线,只需通过分析输出数组过滤掉其他行。由于输出向量的每一项都是4元素向量(x_1, y_1, x_2, y_2),因此可以计算直线的斜率,并使用它筛选出非水平线。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21904064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档