detecção de linha reta opencv

A detecção de linha reta deve ser detectada contra a imagem binária do resultado da detecção de borda e não pode ser detectada contra a imagem cinza

A imagem binária e a imagem resultante da detecção de bordas ainda são diferentes.

O resultado da detecção do gráfico binário:

api:

cv.HoughLines (image, rho, theta, threshold, lines = None, srn = None, stn = None, min_theta = None, max_theta = None)

parâmetro: o
primeiro parâmetro é uma imagem binária, então a transformação Hough Before, binarização ou É necessária uma detecção de borda habilidosa.

 

A função HoughLinesP de opencv é uma função de transformação de linha Hough de probabilidade estatística, que pode gerar os pontos finais da linha detectada. Seu protótipo de função é: HoughLinesP (imagem, rho, theta, threshold [, lines [, minLineLength [, maxLineGap]] ]) -> linhas

O parâmetro image representa a imagem de saída da detecção de borda, que é uma imagem binária de 8 bits de canal único.

O parâmetro rho representa a resolução do parâmetro diâmetro polar em valores de pixel, e 1 pixel é geralmente usado aqui.

O parâmetro theta representa a resolução do parâmetro ângulo polar em radianos e 1 grau é usado aqui. Geralmente definido como CV_PI / 180;

O parâmetro de limite representa o ponto mínimo de interseção da curva necessário para detectar uma linha reta.

O parâmetro lines representa o container que armazena os pares de parâmetros da linha detectada, ou seja, as coordenadas dos dois pontos finais do segmento de linha.

O parâmetro minLineLength indica o número mínimo de pontos que podem formar uma linha reta. Linhas com pontos insuficientes serão descartadas.

O parâmetro maxLineGap representa a distância máxima de um ponto brilhante que pode ser considerado em linha reta.
 

demo:

 

import cv2
import numpy as np
image=cv2.imread("erzhi.jpg")

start=time.time()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 120)
line = 100
minLineLength = 15
lines = cv2.HoughLinesP(edges, 1, np.pi / 90, 10, lines=line, minLineLength=minLineLength)
lines1 = lines[:, 0, :]
print(time.time()-start,lines.shape)
for x1, y1, x2, y2 in lines1:


    cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imshow("edges",edges)
cv2.imshow("lines",image)
cv2.waitKey()

Acho que você gosta

Origin blog.csdn.net/jacke121/article/details/115213997
Recomendado
Clasificación