Создание видео обрезанных кадров в Python OpenCV - PullRequest
2 голосов
/ 24 февраля 2020

В моей программе я читаю оригинальное видео, затем обрезаю каждый кадр и, наконец, мне нужно сделать видео из всех обрезанных кадров.
Кадры обрезаются с размером, который я определяю (вверху, внизу, слева и верно), но это не сохраняет его в видео.
Я пытаюсь сделать следующее:

input_video = cv2.VideoCapture(videosPath+"/"+video)
while True:
    ret, frame = input_video.read()
        if not ret:
            break
    for (top, right, bottom, left) in *****
        crop_img = frame[top:bottom, left:right]
        fourcc = cv2.VideoWriter_fourcc(*'XVID')
        output_movie = cv2.VideoWriter('videoPrueba.avi', fourcc, 30, (450, 360))
        output_movie.write(crop_img)

Спасибо!

1 Ответ

2 голосов
/ 25 февраля 2020

Рекомендуемые этапы: чтение , кадрирование , запись каждая итерация.

Вместо того, чтобы читать все кадры, затем обрезать все кадры, а затем записывать все кадры, я предлагаю следующее решение:

  • Откройте как входные, так и выходные видеофайлы выше while l oop.
  • Внутри l oop каждая итерация: прочитайте кадр, обрежьте его и запишите результат в выходное видео.
  • В конце используйте output_movie.release() для закрытия средства записи видео.

Вот пример кода:

import cv2

top, right, bottom, left = 10, 450+10, 360+10, 10  # Sample values.


input_video = cv2.VideoCapture('Sample_Vid.mp4')

fourcc = cv2.VideoWriter_fourcc(*'XVID')
output_movie = cv2.VideoWriter('videoPrueba.avi', fourcc, 30, (450, 360))

while True:
    ret, frame = input_video.read()

    if not ret:
        break

    # Following crop assumes the video is colored, 
    # in case it's Grayscale, you may use: crop_img = frame[top:bottom, left:right]  
    crop_img = frame[top:bottom, left:right, :]

    output_movie.write(crop_img)


# Closes the video writer.
output_movie.release()
...