openCV python检测到奇怪的行

时间:2017-07-28 13:50:27

标签: python opencv

我遵循了python openCV的教程,并尝试使用HoughLinesP()来检测行,这里是代码:

imgLoc = '...\lines.jpg'

img = cv2.imread(imgLoc)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 100)
minLineLength = 20; maxLineGap = 5
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, \
    minLineLength, maxLineGap)
for [[x1, y1, x2, y2]] in lines:
    cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imshow('line', img)
cv2.waitKey(); cv2.destroyAllWindows()

这就是我得到的: floatingLines 显然很奇怪。天空中有太多的线条,我从未想到过,我认为建筑物上会有更多的垂直线,但事实并非如此。

教程没有给出证明结果应该如何的图片,所以我不知道这是否正常。

那么,我的代码中是否存在导致该有线图像的任何问题?如果有,我可以进行一些更改以让它检测到更多的垂直线吗?

========== Update_1 ============

我按照评论的建议,现在可以检测到更多行:

#minLineLength = 20; maxLineGap = 5
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, \
    minLineLength = 10, maxLineGap = 5)

lineDetection2.0 但仍缺乏垂直线条。 并Canny()结果: Canny

Canny()的结果中有垂直边缘,为什么它们会在HoughLinesP()之后消失? (或者那只是视觉错误?)

========== Update_2 ============

我添加了模糊和值minLineLength

gray = cv2.GaussianBlur(gray, (5, 5), 0)
...
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, \
        minLineLength = 50, maxLineGap = 5)

结果更清晰,但仍然没有多少垂直线...... Edges detected 我开始想知道这些斜线来自哪里

1 个答案:

答案 0 :(得分:1)

在执行Canny边缘检测之前,可能需要先进行一些平滑处理。

我建议minLineLength(和maxLineGap的值更高,但这不应该很大)。这应该摆脱较小的线条并连接检测到的垂直线段。如果仍然没有显示垂直线,我们可能必须查看阈值参数。