我遵循了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()
这就是我得到的:
显然很奇怪。天空中有很多我从未料到的线,我以为建筑物上会有更多的垂直线,但是没有。
本教程未提供图片说明结果应该如何,因此我不知道这是否正常。
因此,我的代码中是否有任何导致该有线图像的问题? 如果可以,我可以做些更改以使其检测到更多垂直线吗?
==========更新_1 ============
我遵循了评论的建议,现在可以检测到更多行:
#minLineLength = 20; maxLineGap = 5
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, \
minLineLength = 10, maxLineGap = 5)
但是仍然缺少垂直线。
和
Canny()
结果:在
Canny()
的结果中存在垂直边缘,为什么它们在HoughLinesP()
之后消失了? (或者那仅仅是视觉错误?)==========更新_2 ============
我添加了一个模糊和
minLineLength
的值:gray = cv2.GaussianBlur(gray, (5, 5), 0)
...
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, \
minLineLength = 50, maxLineGap = 5)
结果更清晰,但垂直线仍然不多...
我开始怀疑这些斜线是从哪里来的
最佳答案
在执行Canny边缘检测之前,可能需要先进行一些平滑处理。
我建议为minLineLength
(和maxLineGap
)设置更高的值,尽管这个值应该不会很大。那应该去除较小的线,并在检测到的地方连接垂直线段。如果仍然不能显示垂直线,则可能必须查看阈值参数。
关于python - openCV python检测到奇怪的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375220/