Heim >Backend-Entwicklung >C++ >Warum verzögert sich mein OpenCV-VideoCapture und wie kann ich das beheben?

Warum verzögert sich mein OpenCV-VideoCapture und wie kann ich das beheben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-05 17:40:02862Durchsuche

Why is My OpenCV VideoCapture Lagging, and How Can I Fix It?

OpenCV VideoCapture-Verzögerung aufgrund des Aufnahmepuffers

Bei der Videoaufnahme über eine Webcam kann es aufgrund des Aufnahmepuffers zu einer Verzögerung kommen Frames werden vor dem Lesen gespeichert. Dieses Problem tritt auf, wenn die Rate, mit der Frames gelesen werden, langsamer ist als die Rate, mit der sie erfasst werden, was zu einer Anhäufung von Frames im Puffer führt.

OpenCV Solution

In OpenCV können Sie die Puffergröße eines VideoCapture-Objekts mit CV_CAP_PROP_BUFFERSIZE festlegen:

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

Hackaround 1

Wenn die OpenCV-Lösung dies tut Wenn dies nicht funktioniert, können Sie diesen Hackaround verwenden:

  1. Messen Sie die Zeit, die benötigt wird, um einen Frame aus dem Puffer abzufragen.
  2. Wenn die Zeit knapp ist, verwerfen Sie den Frame so, wie er war Aus dem Puffer lesen.
  3. Fortfahren Sie mit der Abfrage von Frames, bis die Zeit einen Grenzwert überschreitet, was anzeigt, dass der Puffer leer und der nächste Frame aktuell ist.

Hackaround 2

Ein weiterer Hackaround besteht darin, einen dritten Thread zu verwenden, um Frames kontinuierlich mit hoher Geschwindigkeit zu erfassen, um den Puffer leer zu halten:

  1. Erstellen Sie einen dritten Thread, der cv: aufruft: VideoCapture.grab() zum Abrufen von Frames.
  2. Verwenden Sie einen Spin-Lock, um das Lesen von Frames zwischen dem Arbeitsthread und dem dritten Thread zu synchronisieren.

Das obige ist der detaillierte Inhalt vonWarum verzögert sich mein OpenCV-VideoCapture und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn