OpenCV и python - обрезать поток веб-камеры и сохранить его в файл - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу сохранить в файл определенную c область видео, записанную моей веб-камерой. Я определяю пределы области, которую я хочу записать, используя переменные x_0, x_1 (ширина) и y_0, y_1 (высота), обрезая записанный кадр и сохраняя его в файл. Я также передаю эти размеры в cv2.VideoWriter.
Вот мой код:

import cv2


def main():
    # these are the limits of the cropped area
    x_0 = 100
    x_1 = 440
    y_0 = 0
    y_1 = 450

    cap = cv2.VideoCapture(2)
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    # passing the dimensions of cropped area to VideoWriter
    out_video = cv2.VideoWriter('recording.avi', fourcc, 15.0, (y_1-y_0, x_1-x_0))

    while(cap.isOpened()):
        ret, frame = cap.read()

        if ret == True:
            frame_crop = frame[y_0:y_1, x_0:x_1]
            out_video.write(frame_crop)
            cv2.imshow("crop", frame_crop)
            key = cv2.waitKey(25)
            if key == ord('q'):
                break
        else:
            break

    cv2.destroyAllWindows()
    cap.release()


if __name__ == "__main__":
    main()

, когда я прекращаю запись, файл генерируется, но он пуст. Проблема в том, как я управляю кадрированием, потому что, если я просто использую, скажем:

out_video = cv2.VideoWriter('recording.avi', fourcc, 15.0, (640, 480))

и сохраните весь кадр (используя out_video.write (frame_crop) ') вместо кадрированного один, он работает.
Что я делаю не так?

1 Ответ

1 голос
/ 01 апреля 2020

Параметр размера видео в VideoWriter должен иметь форму (width, height)

Вам нужно изменить свой вызов так, чтобы он был таким:

out_video = cv2.VideoWriter('recording.avi', fourcc, 15.0, (x_1-x_0, y_1-y_0))
...