我想问一下,是否有一种方法只能检测近乎水平的霍夫线或忽略那些近乎垂直的霍夫线?我现在的HoughLine代码如下所示:
HoughLinesP(imagec, lines, 80, CV_PI/2, CV_THRESH_OTSU|CV_THRESH_BINARY, 25, 7);
for(size_t i = 0; i < lines.size(); i++)
{
Vec4i l = lines[i];
line(imagec, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(255,255,255), 8, 8);
line(imagelines, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(255,255,255), 8, 8); //draw on black image as well
}
然而,在图像中,我只想检测水平线,或者至少接近2到4厘米的水平线。我在HoughLineP中使用CV_PI/2
作为theta参数,因此也检测到垂直线/近垂直线。
任何建议,代码示例等将不胜感激。感谢。
答案 0 :(得分:6)
删除垂直线
首先使用等式
找到每条线的角度 double Angle = atan2(y2 - y1, x2 - x1) * 180.0 / CV_PI;
只需忽略角度为90度(垂直线)的线条。
完成!。
答案 1 :(得分:4)
Python版
import numpy as np
angle = np.arctan2(y2 - y1, x2 - x1) * 180. / np.pi