【问题标题】:Hough lines in OpenCV/PythonOpenCV/Python 中的霍夫线
【发布时间】:2016-02-06 02:38:38
【问题描述】:

我正在尝试在 python 中使用 opencv 在图像中查找霍夫线。

我的代码是:

import cv2
import numpy as np

img = cv2.imread('DLMIA.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)


edges = cv2.Canny(gray,100,200,apertureSize = 3)
cv2.imshow('edges',edges)
cv2.waitKey(0)

minLineLength = 30
maxLineGap = 10
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for x1,y1,x2,y2 in lines[0]:
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)

cv2.imshow('hough',img)
cv2.waitKey(0)

我使用的图片是

我的结果图片是

我的代码示例取自here

生成的图像与上一个链接中提到的不同。有什么帮助吗?

【问题讨论】:

    标签: python-2.7 opencv


    【解决方案1】:

    我找到了解决办法。

    代码示例仅显示第一行。

    如果您想在图像上打印所有霍夫线,则必须打印所有线。

    这是更正后的代码:

    import cv2
    import numpy as np
    
    img = cv2.imread('dave.jpg')
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    
    edges = cv2.Canny(gray,100,200,apertureSize = 3)
    cv2.imshow('edges',edges)
    cv2.waitKey(0)
    
    minLineLength = 30
    maxLineGap = 10
    lines = cv2.HoughLinesP(edges,1,np.pi/180,15,minLineLength=minLineLength,maxLineGap=maxLineGap)
    for x in range(0, len(lines)):
        for x1,y1,x2,y2 in lines[x]:
            cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
    
    cv2.imshow('hough',img)
    cv2.waitKey(0)
    

    【讨论】:

      【解决方案2】:

      我也遇到过同样的问题 是因为循环,

      for x1,y1,x2,y2 in lines[0]:
      

      它将只取第一行的坐标。返回的数组是 3d。

      您可以通过使用以下 as 循环来纠正它:

      for line in lines:
          for x1,y1,x2,y2 in line:
      

      【讨论】:

        【解决方案3】:

        更优雅的解决方案是使用 for line in lines: for x1,y1,x2,y2 in line: ...

        【讨论】:

        • 这实际上是对已接受答案的评论,而不是对提问者的回应。当您达到所需的声誉级别时,何时可以离开此类 cmets。
        猜你喜欢
        • 2012-07-06
        • 1970-01-01
        • 2015-02-16
        • 2011-12-17
        • 2020-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多