繁体   English   中英

即使图像在Python中的OpenCV中包含许多行,Hough Line Transform也只识别一行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM