OpenCV/Python中的霍夫直线检测

6

我正在尝试使用Python中的OpenCV在图像中查找Hough线。

我的代码如下:

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)

我使用的图片是this
我的结果图片是this
我的代码示例取自这里
结果图片与之前链接中的图片不同,有什么帮助吗?
3个回答

30

我找到了解决方法。

代码示例仅显示第一条霍夫线。

如果您想在图像上打印出所有的霍夫线,您需要打印所有的线。

这是更正后的代码:

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)

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

5
这实际上是对已接受答案的评论,而不是对提问者的回应。只有当您达到所需的声望级别时,才可以留下这样的评论。 - trincot

4

我曾经遇到过同样的问题,这是由于循环引起的。

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

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

你可以使用以下循环来更正:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接