Maison >développement back-end >C++ >Comment surmonter le décalage dans OpenCV VideoCapture causé par l'accumulation de tampon de capture ?

Comment surmonter le décalage dans OpenCV VideoCapture causé par l'accumulation de tampon de capture ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 12:34:02647parcourir

How to Overcome Lag in OpenCV VideoCapture Caused by Capture Buffer Accumulation?

Décalage de capture vidéo OpenCV induit par le tampon de capture

Vous avez rencontré un problème de décalage avec VideoCapture d'OpenCV en raison de l'accumulation d'images dans le tampon de capture. Pour contourner le problème, vous avez eu recours à la lecture du tampon à 30 ips pour l'effacer rapidement.

OpenCV Solution

OpenCV fournit un moyen de définir manuellement la taille du tampon. :

<code class="cpp">cv::VideoCapture cap;
cap.set(CV_CAP_PROP_BUFFERSIZE, 3); // store only 3 frames</code>

Cependant, cette solution n'est supportée que par le backend DC1394 v 2.x.

Hackaround 1

Une alternative L'approche consiste à mesurer le temps nécessaire pour récupérer une image :

  • Si le temps est court, l'image provient du tampon et peut être supprimée.
  • Répétez jusqu'à ce que le temps dépasse un seuil, indiquant que le tampon est vide.

Hackaround 2

Vous pouvez créer un troisième thread qui récupère continuellement des images à grande vitesse en utilisant cv ::VideoCapture.grab() pour garder le tampon vide. Synchronisez l'accès entre ce thread et votre thread de travail à l'aide d'un spin-lock.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn