5

J'ai besoin d'une détection de mouvement robuste et d'un suivi dans les trames vidéo de la caméra web. L'arrière-plan est toujours le même. Le but est d'identifier la position de l'objet, si possible sans les ombres, mais pas si urgent pour supprimer les ombres. J'ai essayé l'algorithme d'opencv pour la soustraction d'arrière-plan et le seuillage, mais cela dépend d'une seule image comme fond, et si l'arrière-plan change un peu de luminosité (ou auto-focus), j'ai besoin de l'algorithme petits changements comme la luminosité ou des ombres.Opencv Détection de mouvement avec suivi

Répondre

3

Une méthode de suivi robuste fait partie des grands intérêts de recherche en cours de développement partout dans le monde ... Voici peut-être des clés pour résoudre votre problème qui est très intéressant mais large et ouvert. Tout d'abord, beaucoup d'entre eux suppose la constance de la luminosité (donc ce que vous demandez est difficile à réaliser). Par exemple:

  • Lucas-Kanade
  • Horn-Schunk
  • Bloc-correspondant

est largement utilisé pour le suivi, mais suppose la constance de luminosité.

Ensuite, d'autres pourraient être intéressants ceux ou le suivi des écart des moyennes Camshift, mais vous avez besoin d'une projection à suivre ... Cependant, vous pouvez utiliser une rétroprojection calculée en conséquence à seuil pour répondre à vos besoins de robustesse ...

Je posterai plus tard à ce sujet, Julien,

3

Lorsque vous essayez seuillage à OpenCV que vous faites cela avec RVB (rouge, vert, bleu) ou HSV (teinte, saturation, valeur) formats de couleur? D'après mon expérience personnelle, je trouve que le codage HSV est de loin supérieur pour le suivi des objets colorés dans les séquences vidéo lorsqu'il est utilisé conjointement avec OpenCV pour le seuillage et cvBlobsLib pour l'identification de l'emplacement des blobs. HSV est plus facile car HSV a l'avantage de n'avoir à utiliser qu'un seul nombre pour détecter la couleur ("teinte"), malgré la probabilité très réelle d'avoir plusieurs nuances de cette couleur, allant de la lumière à nuances plus sombres. (La quantité de couleur et la luminosité de la couleur sont traitées par les paramètres "saturation" et "valeur" respectivement).

seuil I l'image de référence HSV ('de imgHSV') pour obtenir une image binaire (noir et blanc) en utilisant un appel de l'API OpenCV cvInRange():

cvInRangeS(imgHSV, 
      cvScalar(104, 178, 70 ), 
      cvScalar(130, 240, 124), 
      imgThresh); 

Dans l'exemple ci-dessus, les deux Les paramètres cvScalar sont des limites inférieures et supérieures de valeurs HSV qui représentent des teintes de couleur bleuâtre. Dans mes propres expériences, j'ai pu obtenir des valeurs max/min appropriées en saisissant des captures d'écran du ou des objets que je souhaitais suivre et en observant les types de valeurs de teinte/saturation/lumière qui se produisent.

Des descriptions plus détaillées avec un échantillon de code peuvent être trouvées sur ce blog posting.

1

Andrian a un tutoriel frais http://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/

J'ai suivi et ont une bonne expérience test de https://youtu.be/HJBOOZVefXA

J'utilise l'image statique et

frameDelta = cv2.absdiff(firstFrame, gray) 
thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1] 
thresh = cv2.dilate(thresh, None, iterations=2) 
(cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, 
cv2.CHAIN_APPROX_SIMPLE) 

4 lignes mouvement find code bien bonne chance