Cet article explore un problème courant rencontré lors de la capture vidéo à l'aide de l'objet VideoCapture d'OpenCV : le décalage dû à la capture tampon. Nous présentons des solutions potentielles, à la fois à partir d'OpenCV et sous forme de hackarounds.
Selon la documentation OpenCV, la taille du tampon de capture peut être définie. Cependant, cette fonctionnalité n'est disponible qu'avec le backend DC1394 v2.x.
<code class="cpp">cv::VideoCapture cap; cap.set(CV_CAP_PROP_BUFFERSIZE, 3);</code>
Dans les versions 3.4 et ultérieures d'OpenCV, la limitation semble avoir été supprimée :
<code class="cpp">cv::VideoCapture cap; cap.set(cv::CAP_PROP_BUFFERSIZE, 3);</code>
Si la solution OpenCV échoue, nous pouvons utiliser un hackaround basé sur la mesure du temps nécessaire pour récupérer une image. Si elle est trop courte, la trame a probablement été extraite du tampon et peut être supprimée. Nous continuons à interroger les images jusqu'à ce que le temps dépasse un seuil, indiquant une image à jour.
Un autre hackaround consiste à créer un thread séparé pour récupérer en continu des images à grande vitesse, en utilisant cv::VideoCapture.grab(), pour garder le tampon vide. La synchronisation entre les threads principaux et supplémentaires peut être réalisée à l'aide d'un spin-lock.
Bien qu'OpenCV fournisse un paramètre de taille de tampon, sa disponibilité est limitée avec certains backends. Les hackarounds présentés proposent des approches alternatives pour atténuer le décalage du tampon, permettant aux développeurs de capturer des vidéos avec des délais réduits. La solution optimale peut varier en fonction des exigences du système et de l'application.
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!