Как получить последний обработанный кадр из видео с помощью opencv? - PullRequest
0 голосов
/ 08 мая 2020

Я хочу извлечь последний кадр видео, который был обработан ранее с помощью Motion History Image (MHI), и я хочу сохранить последнее изображение, обработанное MHI.

Вот мой код:

import numpy as np
import cv2

MHI_DURATION = 35
DEFAULT_THRESHOLD = 30


def main():

    live_video = False
    video_src = 1
    if not live_video:
        video_src = "data/vid1.mp4"

    cv2.namedWindow('motion-history')
    cv2.namedWindow('raw')
    cv2.moveWindow('raw', 200, 0)

    cam = cv2.VideoCapture(video_src)
    ret, frame = cam.read()
    h, w = frame.shape[:2]
    prev_frame = frame.copy()
    motion_history = np.zeros((h, w), np.float32)
    timestamp = 0
    while True:
        ret, frame = cam.read()
        if not ret:
            break
        frame_diff = cv2.absdiff(frame, prev_frame)
        gray_diff = cv2.cvtColor(frame_diff, cv2.COLOR_BGR2GRAY)
        ret, fgmask = cv2.threshold(gray_diff, DEFAULT_THRESHOLD, 1, cv2.THRESH_BINARY)
        timestamp += 1

        # update motion history
        cv2.motempl.updateMotionHistory(fgmask, motion_history, timestamp, MHI_DURATION)

        # normalize motion history
        mh = np.uint8(np.clip((motion_history - (timestamp - MHI_DURATION)) / MHI_DURATION, 0, 1) * 255)
        cv2.imshow('motion-history', mh)
        # cv2.imshow('raw', frame)

        prev_frame = frame.copy()
        if 0xFF & cv2.waitKey(5) == 27:
            break

    cv2.destroyAllWindows()

И можем ли мы быстрее обрабатывать без l oop весь кадр в видео?

...