python - openCV python检测到奇怪的行

标签 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
显然很奇怪。天空中有很多我从未料到的线,我以为建筑物上会有更多的垂直线,但是没有。

本教程未提供图片说明结果应该如何,因此我不知道这是否正常。

因此,我的代码中是否有任何导致该有线图像的问题? 如果可以,我可以做些更改以使其检测到更多垂直线吗?

==========更新_1 ============

我遵循了评论的建议,现在可以检测到更多行:
#minLineLength = 20; maxLineGap = 5
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, \
    minLineLength = 10, maxLineGap = 5)

lineDetection2.0
但是仍然缺少垂直线。
Canny()结果:
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)

结果更清晰,但垂直线仍然不多...
Edges
detected
我开始怀疑这些斜线是从哪里来的

最佳答案

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

我建议为minLineLength(和maxLineGap)设置更高的值,尽管这个值应该不会很大。那应该去除较小的线,并在检测到的地方连接垂直线段。如果仍然不能显示垂直线,则可能必须查看阈值参数。

关于python - openCV python检测到奇怪的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375220/

相关文章:

python - Postgres : is set_config(). current_setting() 应用程序变量的私有(private)/稳健堆栈?

python numpy `np.take` 与二维数组

python - 为图像对比度度量实现直方图扩展

c++ - 使用 C++ 进行图像处理

android - 如何按一个因子缩放轮廓的高度?

python - OpenCV中的图像阈值

python - mypy vs mypy-lang vs pyls-mypy python包之间的区别

opencv - 使用 opencv HoughCircles 检测实心白色圆圈

java - 特征/ Blob 相关性和直方图分析

javascript - 是否可以在Python中输出类似于CryptoJS.enc.Hex.parse(hash)的单词数组