Heim >Backend-Entwicklung >C++ >Wie kann ich die Pufferverzögerung bei der Videoaufnahme mit VideoCapture von OpenCV reduzieren?
In diesem Artikel wird ein häufiges Problem untersucht, das bei der Videoaufnahme mit dem VideoCapture-Objekt von OpenCV auftritt: Verzögerung aufgrund der Aufnahme Puffer. Wir stellen mögliche Lösungen vor, sowohl von OpenCV als auch als Hackarounds.
Laut der OpenCV-Dokumentation kann die Capture-Puffergröße eingestellt werden. Diese Funktion ist jedoch nur mit dem Backend DC1394 v2.x verfügbar.
<code class="cpp">cv::VideoCapture cap; cap.set(CV_CAP_PROP_BUFFERSIZE, 3);</code>
In OpenCV-Versionen 3.4 und höher scheint die Einschränkung entfernt worden zu sein:
<code class="cpp">cv::VideoCapture cap; cap.set(cv::CAP_PROP_BUFFERSIZE, 3);</code>
Wenn die OpenCV-Lösung fehlschlägt, können wir einen Hackaround anwenden, der auf der Messung der Zeit basiert, die zum Abrufen eines Frames benötigt wird. Wenn es zu kurz ist, wurde der Frame wahrscheinlich aus dem Puffer genommen und kann verworfen werden. Wir fragen weiterhin Frames ab, bis die Zeit einen Schwellenwert überschreitet, was auf einen aktuellen Frame hinweist.
Ein weiterer Hackaround besteht darin, einen separaten Thread zu erstellen, um Frames kontinuierlich mit hoher Geschwindigkeit zu erfassen cv::VideoCapture.grab(), um den Puffer leer zu halten. Die Synchronisierung zwischen Haupt- und Zusatzthreads kann über einen Spinlock erreicht werden.
Obwohl OpenCV eine Puffergrößeneinstellung bietet, ist deren Verfügbarkeit bei bestimmten Backends begrenzt. Die vorgestellten Hackarounds bieten alternative Ansätze zur Verringerung der Pufferverzögerung, sodass Entwickler Videos mit geringeren Verzögerungen aufnehmen können. Die optimale Lösung kann je nach System- und Anwendungsanforderungen variieren.
Das obige ist der detaillierte Inhalt vonWie kann ich die Pufferverzögerung bei der Videoaufnahme mit VideoCapture von OpenCV reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!