2017-09-16 9 views
1

J'utilise le code suivant pour détecter les cercles:détection de cercle est le saut

gray = cv2.GaussianBlur(gray, (5, 5), 0); 
gray = cv2.medianBlur(gray, 5) 

kernel = np.ones((2, 2), np.uint8) 
gray = cv2.erode(gray, kernel, iterations=1) 

gray = cv2.dilate(gray, kernel, iterations=1) 
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 200, 
          param1=100, param2=50, minRadius=0, maxRadius=150) 


if circles is not None: 
    # Convert the (x,y) coordinate and radius of the circles 
    circles = np.round(circles[0, :]).astype("int") 

    # Loop over the (x,y) coordinate and radius of the circles 
    for (x, y, r) in circles: 
     # Draw the circle in the output 
     cv2.circle(fancy_frame, (x+x1, y+y1), r, (0, 255, 0), 4) 

Cependant, le cercle est le saut quand je perçois. Comment puis-je régler cela? Y a-t-il un haar ou un svm pour le détecter?

C'est la sortie que je reçois:

Output

Je veux détecter tous les cercles vidéo en temps réel

+0

Postez votre résultat et le résultat attendu. – zindarod

+0

Veuillez vérifier la question mise à jour – user1241241

+0

Vous devez appliquer un algorithme de suivi, par exemple kalman-filter – eyllanesc

Répondre

1

Votre code semble bien, il vous suffit plus susceptibles de modifier HoughCircles parameters. Commencez par abaisser le paramètre dp, il devrait vous donner plus de détections. Je courus houghcircles.py à partir d'échantillons OpenCV dossier sur votre image et il détecte la plupart du reste des cercles:

$ python houghcircles.py your_image.png 

result

détection Hough pour les cercles est calcul assez lourd de sorte qu'il pourrait être difficile à exécuter ceci en temps réel. De plus, les "cercles" sur votre image sont loin d'être parfaits, ce qui ne facilite pas l'algorithme. Envisagez d'entraîner un réseau neuronal à la place pour détecter ces fonctionnalités.