OpenCV VideoCapture in Python: Immer den neuesten Frame erhalten

English Deutsch

Wenn Sie mit der OpenCV-Videoaufzeichnung arbeiten, aber nur gelegentlich Bilder verwenden, erhalten Sie ältere Bilder aus dem Aufzeichnungspuffer.

Dieses Code-Beispiel löst dieses Problem, indem ein separater Aufzeichnungs-Thread gestartet wird, der kontinuierlich Bilder in einen temporären Puffer speichert.

Daher können Sie immer das neueste Bild aus dem Puffer abrufen. Der Code basiert auf unserem Basis-Beispiel Webcam-Bild mit OpenCV in Python aufnehmen

opencv_latest_frame.py
video_capture = cv2.VideoCapture(0)

video_capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
video_capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

if not video_capture.isOpened():
    raise Exception("Could not open video device")

class TakeCameraLatestPictureThread(threading.Thread):
    def __init__(self, camera):
        self.camera = camera
        self.frame = None
        super().__init__()
        # Thread starten
        self.start()

    def run(self):
        while True:
            ret, self.frame = self.camera.read()

latest_picture = TakeCameraLatestPictureThread(video_capture)

Verwendungsbeispiel:

opencv_latest_frame_usage.py
# Neuestes Bild in den korrekten Farbraum konvertieren
rgb_img = cv2.cvtColor(latest_picture.frame, cv2.COLOR_BGR2RGB)
# Anzeigen
plt.imshow(rgb_img)

Check out similar posts by category: Audio/Video, OpenCV, Python