Maison > Article > développement back-end > Comment résoudre le décalage de capture vidéo causé par un tampon de capture complet dans OpenCV ?
La capture de flux vidéo mjpeg à partir d'une webcam à l'aide de VideoCapture d'OpenCV peut entraîner un décalage important si le fil de capture lit les images à une fréquence inférieure à la fréquence d'images du flux de la webcam. Ceci est dû à l'accumulation d'images dans le tampon de capture jusqu'à ce que le tampon soit vidé.
Pour vider manuellement le tampon de capture, vous pouvez définir la propriété CV_CAP_PROP_BUFFERSIZE de l'objet VideoCapture. Cela limitera le nombre d'images stockées dans le tampon interne. Cependant, cette option n'est prise en charge que pour certains matériels backend.
Si la définition de la taille du tampon ne résout pas le problème, vous pouvez utiliser une technique de hackaround. Cela implique d'interroger des images à plusieurs reprises jusqu'à ce que le temps nécessaire pour récupérer une image dépasse un certain seuil. Si le temps de récupération est inhabituellement court, cela indique que la trame a été obtenue à partir du tampon et doit être supprimée.
Une autre solution de piratage consiste à créer un thread séparé qui récupère en permanence les images. à grande vitesse pour garder le tampon de capture vide. Ce fil doit utiliser la fonction cv::VideoCapture.grab() pour éviter les frais généraux lors de la capture d'images. Vous pouvez utiliser des techniques de synchronisation pour garantir que le thread de travail lit les trames du tampon de manière contrôlée.
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!