Mam trudności ze znalezieniem linii na szachownicy na tym obrazie za pomocą HoughLinesP z OpenCV w Pythonie.Parametry houghLinesP OpenCV
Próbując zrozumieć parametry HoughLinesP, mam wymyślić następujący kod:
import numpy as np
import cv2
from matplotlib import pyplot as plt
from matplotlib import image as image
I = image.imread('chess.jpg')
G = cv2.cvtColor(I, cv2.COLOR_BGR2GRAY)
# Canny Edge Detection:
Threshold1 = 150;
Threshold2 = 350;
FilterSize = 5
E = cv2.Canny(G, Threshold1, Threshold2, FilterSize)
Rres = 1
Thetares = 1*np.pi/180
Threshold = 1
minLineLength = 1
maxLineGap = 100
lines = cv2.HoughLinesP(E,Rres,Thetares,Threshold,minLineLength,maxLineGap)
N = lines.shape[0]
for i in range(N):
x1 = lines[i][0][0]
y1 = lines[i][0][1]
x2 = lines[i][0][2]
y2 = lines[i][0][3]
cv2.line(I,(x1,y1),(x2,y2),(255,0,0),2)
plt.figure(),plt.imshow(I),plt.title('Hough Lines'),plt.axis('off')
plt.show()
Problem mam jest to, że odbiera tylko jeden wiersz. Jeśli zmniejszę maxLineGap do 1, odbiera tysiące.
Rozumiem, dlaczego tak jest, ale jak wybrać odpowiedni zestaw parametrów, aby uzyskać wszystkie te współliniowe linie do scalenia? Czy czegoś brakuje?
Chciałbym zachować prosty kod, ponieważ używam go jako przykładu tej funkcji w akcji.
Z góry dziękuję za pomoc!
Aktualizacja: Działa to doskonale z HoughLines.
Wygląda na to, że Canny nie radzi sobie z wykrywaniem krawędzi.
Jednak nadal muszę uruchomić HoughLinesP. Jakieś pomysły??
Obrazy tutaj: Results
Awesome. Powinieneś zaakceptować swoją odpowiedź. – Phani
Dzięki za przypomnienie, Phani! Zrobi to. –