[英]Hough Line Transform identifies only one line even though image contains many lines in OpenCV in Python
我在OpenCV中使用拉普拉斯变换进行边缘检测,然后使用霍夫线变换检测其中的线。 这些识别的线最终需要从图像中移除。
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('Feb_16-0.jpg',0)
kernel = np.ones((1,1),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
blur = cv2.GaussianBlur(opening,(1,1),0)
ret3,th4 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
laplacian = cv2.Laplacian(th4,cv2.CV_8UC1)
cst = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
minLineLength = 100
maxLineGap = 10
lines = cv2.HoughLinesP(laplacian,1,np.pi/180,100,minLineLength,maxLineGap)
for x1,y1,x2,y2 in lines[0]:
cv2.line(cst,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imwrite('houghlines5.jpg',cst)
拉普拉斯边缘检测的结果如下:
而Hough Line Transform返回的结果只标识了下图中绿线所标记的一条线:
任何人都可以帮我弄清楚代码中需要进行哪些修改,以便识别出互联网法案的所有大胆的横向/纵向线?
在我看来,你只是阅读“行”中的第一个元素:
for x1,y1,x2,y2 in lines[0]:
cv2.line(cst,(x1,y1),(x2,y2),(0,255,0),2)
因此,您只绘制了已发现的第一条(最重要的)线(最长,最厚)。 我建议你试试:
for line in lines:
for x1,y1,x2,y2 in line:
cv2.line(cst,(x1,y1),(x2,y2),(0,255,0),2)
此外,如果仍然没有得到正确的结果,我建议将minLineLength设置得更低。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.