J'essaie de développer un programme capable de détecter les voies sur la route. J'ai expérimenté avec Hough Line Transform et Probabilistic Hough Line Transform. Cependant, aucun d'entre eux n'obtient les résultats que je veux.Le programme de détection de voie routière ne parvient pas à détecter correctement la voie
image originale:
Hough Transform Ligne
probabilistes Hough Transform Ligne
Il semble que pour Hough Line Transform, je puisse au moins détecter la totalité de la voie, mais malheureusement, la ligne continue indéfiniment (jusqu'à ce qu'ils quittent l'image), au point où les lignes se croisent , ce qui n'est pas un bon marqueur de détection de voie graphique.
J'ai également essayé Probalistic Hough Line Transform, et la ligne verte utilisée pour la détection de voie ne va pas à l'infiniment comme l'autre, mais elle ne parvient pas à marquer et à détecter toute la voie.
Je suis en train de reproduire les résultats ici (en l'écrivant en Python)
http://www.transistor.io/revisiting-lane-detection-using-opencv.html
Que puis-je faire pour résoudre ce problème?
code:
import numpy as np
import cv2
from matplotlib import pyplot as plt
from PIL import Image
import imutils
def invert_img(img):
img = (255-img)
return img
def canny(imgray):
imgray = cv2.GaussianBlur(imgray, (5,5), 200)
canny_low = 5
canny_high = 150
thresh = cv2.Canny(imgray,canny_low,canny_high)
return thresh
def filtering(imgray):
thresh = canny(imgray)
minLineLength = 1
maxLineGap = 1
lines = cv2.HoughLines(thresh,1,np.pi/180,0)
#lines = cv2.HoughLinesP(thresh,2,np.pi/180,100,minLineLength,maxLineGap)
print lines.shape
# Code for HoughLinesP
'''
for i in range(0,lines.shape[0]):
for x1,y1,x2,y2 in lines[i]:
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
'''
# Code for HoughLines
for i in range(0,5):
for rho,theta in lines[i]:
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)
return thresh
img = cv2.imread('images/road_0.bmp')
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = imutils.resize(img, height = 500)
imgray = imutils.resize(imgray, height = 500)
thresh = filtering(imgray)
cv2.imshow('original', img)
cv2.imshow('result', thresh)
cv2.waitKey(0)
Merci pour les conseils, mais je reçois des résultats étranges comme ceci: http://s13.postimg.org/ok14ocw2v/image.jpg J'ai probablement reproduit votre code de manière incorrecte, cela vous dérange modifier votre commentaire pour inclure le code complet tu as utilisé? Merci – user3377126
Ah, je m'excuse. Ce n'était probablement pas clair à partir de ce que j'ai écrit. Cette image que j'ai posté est simplement le résultat de la «première» étape que j'ai décrite. Lorsque j'implémente l'étape "Deuxième", j'obtiens aussi l'image complète presque entièrement remplie, semblable à votre image. Je ne sais pas pourquoi c'est. Cependant, je suppose que c'est sur la bonne voie, car il suit de près l'article. Je suppose que c'est un problème avec la modification de ces valeurs (128, 255, canny_low, canny_high). En outre, il pourrait y avoir un code supplémentaire que nous n'avons pas encore ajouté à partir de l'article original. \\ J'espère que cela aide! – nshiff