Python cv2 Wykrywanie linii siatki HoughLines

Mam prostą siatkę na obrazie, próbuję określić rozmiar siatki, np. 6x6, 12x12 itd. Używając Pythona i cv2.

Testuję go z powyższą siatką 3x3, planowałem określić rozmiar siatki, licząc ile pionowych / poziomych linii istnieje, wykrywając je na obrazie:

import cv2
import numpy as np

im = cv2.imread('photo2.JPG')
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)

imgSplit = cv2.split(im)
flag,b = cv2.threshold(imgSplit[2],0,255,cv2.THRESH_OTSU) 

element = cv2.getStructuringElement(cv2.MORPH_CROSS,(1,1))
cv2.erode(b,element)

edges = cv2.Canny(b,150,200,3,5)

while(True):

    img = im.copy()

    lines = cv2.HoughLinesP(edges,1,np.pi/2,2, minLineLength = 620, maxLineGap = 100)[0]

    for x1,y1,x2,y2 in lines:        
        cv2.line(img,(x1,y1),(x2,y2),(0,255,0),1)

    cv2.imshow('houghlines',img)

    if k == 27:
        break

cv2.destroyAllWindows()

Mój kod wykrywa linie, jak widać poniżej, jednak dla każdego wiersza na moim obrazie wykryto wiele linii:

(dla każdej linii na rysunku są narysowane dwie zielone linie 1px)

Nie mogę po prostu podzielić liczby linii przez dwa, ponieważ (w zależności od rozmiaru siatki) czasami zostanie narysowana tylko jedna linia.

Jak mogę dokładniej wykryć i narysować pojedynczą linię dla każdej linii wykrytej w oryginalnym obrazie?

Dostosowałem ustawienia progów, zmniejszając obraz do czerni i bieli, a mimo to wciąż otrzymuję wiele linii. Zakładam, że to z powodu wykrycia krawędzi Canny'ego?

questionAnswers(3)

yourAnswerToTheQuestion