OpenCV parámetros houghLinesP

Estoy teniendo dificultades para encontrar las líneas en un tablero de ajedrez en esta imagen usando HoughLinesP con OpenCV en Python.

En un bash por entender los parámetros de HoughLinesP, he encontrado el siguiente código:

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() 

El problema que estoy teniendo es que esto toma solo una línea. Si reduzco el maxLineGap a 1, recoge miles.

Entiendo por qué esto podría ser, pero ¿cómo selecciono un conjunto de parámetros adecuado para fusionar todas estas líneas colineales? ¿Me estoy perdiendo de algo?

Me gustaría mantener el código simple ya que lo estoy utilizando como un ejemplo de esta función en acción.

¡Gracias de antemano por cualquier ayuda!

Actualización: Esto funciona perfectamente con HoughLines.

Y no parece haber problemas de detección de bordes ya que Canny está funcionando bien.

Sin embargo, todavía necesito que HoughLinesP funcione. ¿¿Algunas ideas??

Imágenes aquí: Resultados

Ok, finalmente encontré el problema y pensé que compartiría la solución para cualquier otra persona loca por esto. El problema es que en la función HoughLinesP, hay un parámetro adicional, “líneas” que es redundante porque la salida de la función es la misma:

cv2.HoughLinesP (imagen, rho, theta, umbral [, líneas [, minLineLength [, maxLineGap]]])

Esto está causando problemas con los parámetros, ya que se leen en el orden incorrecto. Para evitar confusiones con el orden de los parámetros, la solución más simple es especificarlos dentro de la función así:

 lines = cv2.HoughLinesP(E,rho = 1,theta = 1*np.pi/180,threshold = 100,minLineLength = 100,maxLineGap = 50) 

Esto solucionó totalmente mi problema y espero que ayude a otros.

cv2.HoughLinesP (imagen, rho, theta, umbral, np.array ([]), minLineLength = xx, maxLineGap = xx)

Esto también funcionará.

No es HoughLinesP problema de HoughLinesP , usar ese método solo obtendrá todas las líneas detectadas en la imagen y volverá a ti.

Para poder obtener las líneas que desea, deberá suavizar la imagen antes de usar el método. Sin embargo, si suaviza demasiado, no habrá bordes que detecte HoughLinesP.

Puede saber más sobre los efectos de suavizado de OpenCV aquí .