我目前正在尝试使用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 );
}
发布于 2014-02-20 12:57:35
简单地使用这个方程
double Angle = atan2(y2 - y1, x2 - x1) * 180.0 / CV_PI;检查HoughLinesP()检测到的每一行的角度,并考虑角度为0或180的行。
发布于 2014-02-20 10:14:34
尝试将Hough应用于canny或任何其他算法的边缘输出图像,而不是在阈值图像上运行。

可以看出,较高的θ值只代表水平值。通过消除低θ值,滤除lines中的结果。
发布于 2014-02-20 10:24:51
根据我在文档(链接)中可以看到的内容,我认为函数HoughLinesP将检测到图像中的所有行。这些参数仅是影响检测灵敏度的阈值。
因此,如果您只想要水平线,只需通过分析输出数组过滤掉其他行。由于输出向量的每一项都是4元素向量(x_1, y_1, x_2, y_2),因此可以计算直线的斜率,并使用它筛选出非水平线。
https://stackoverflow.com/questions/21904064
复制相似问题