Pour un projet scolaire, j'essaie de reconnaître une forme hexagonale dans une capture vidéo en utilisant python et opencv. Le problème est que lorsque j'utilise ce code, il ne trouve jamais un hexagone. Je n'ai pas trouvé de raison pour laquelle ça ne marche pas alors j'espère que quelqu'un pourra m'aider.Détection de forme python opencv
Le code:
import numpy as np
import cv2
stop_cascade = cv2.CascadeClassifier('cascade.xml')
cap = cv2.VideoCapture(0)
while(True):
ret, img = cap.read()
lower = np.array([0,0,0])
upper = np.array([20,20,20])
mask = cv2.inRange(img, lower, upper)
contours, h = cv2.findContours(mask, 1, 2)
contours.sort(key = len)
for contour in contours[-3:]:
approx = cv2.approxPolyDP(contour,0.1*cv2.arcLength(contour,True),True)
if len(approx) == 6:
print "hexagon"
cv2.imshow('image', mask)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Merci à l'avance
Edit: Pour être un peu plus précis. J'ai essayé plusieurs hexagones différents mais quand j'imprime le len (environ) il n'est jamais plus haut que 4. Est-ce une faute dans mon objet ou est-ce que j'ai une erreur dans la recherche des contours que je ne connais pas?
Qu'avez-vous fait pour réellement déboguer votre programme, au lieu de dire "Je n'ai pas trouvé de raison pour que ça ne marche pas alors j'espère que quelqu'un pourra m'aider?" S'il vous plaît, posez une question * spécifique *, pas "veuillez corriger ceci ..." – blacksite
Je suis désolé de ne pas être suffisamment précis. Ce que j'ai fait pour déboguer le code est de tenir des formes hexagonales différentes devant la caméra, alors que le programme a imprimé la len (approx) mais il n'a jamais montré un nombre supérieur à 4. J'ai ce problème à cause de mes objets (un hexon image en forme sur papier) ou est-ce que je me trompe dans la recherche des contours? – Nerdeose
Pouvez-vous joindre l'entrée d'échantillon? – ZdaR