-1

I'm looking at an example from an official site Opencv: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html I attach the code:

import cv2
import numpy as np

img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)

lines = cv2.HoughLines(edges,1,np.pi/180,200)
for rho,theta in lines[0]:
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a*rho
    y0 = b*rho
    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))

    cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)

cv2.imwrite('houghlines3.jpg',img)

Why does the program find only one line for an image even though the example found many lines? I'm testing on the image attached below enter image description here

enter image description here

Oleg_k
  • 1
  • 1
  • 3

1 Answers1

0

You only draw one line make a loop for iterate all lines

for one_line in lines:
    for rho,theta in one_line:
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a*rho
        y0 = b*rho
        x1 = int(x0 + 1000*(-b))
        y1 = int(y0 + 1000*(a))
        x2 = int(x0 - 1000*(-b))
        y2 = int(y0 - 1000*(a))

        cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)
ikibir
  • 456
  • 4
  • 12
  • I did as you suggested but nothing changed. If i print(len(lines)), i receive 1 – Oleg_k Feb 06 '20 at 07:00
  • Then it can find only one line you should lower your threshold like that lines = cv2.HoughLines(edges,1,np.pi/180,100) – ikibir Feb 06 '20 at 07:46
  • as I understand HoughLines does not give an exact result? – Oleg_k Feb 06 '20 at 08:30
  • You should modify your parameters for your situation check this : https://stackoverflow.com/questions/45322630/how-to-detect-lines-in-opencv – ikibir Feb 06 '20 at 08:37