Как правильно использовать OpenCV VideoWriter? - PullRequest
0 голосов
/ 07 апреля 2020

Я хотел бы обрезать регион видео и сохранить его. Для этого я использовал следующий код:

import cv2

cap = cv2.VideoCapture('input.avi')
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('output.avi', fourcc, 25, (1280, 720))

while True:
    ret, image_np = cap.read()
    if not ret:
        break;

    roi = image_np[300:1020, 0:1280]
    out.write(roi)

cap.release()
out.release()

Видеофайл создан, и я могу смотреть в медиаплеере, но если я хочу прочитать этот файл в python, я получаю сообщение об ошибке .

import cv2

cap = cv2.VideoCapture('output.avi')
_, image_np = cap.read()

Процесс завершен с кодом выхода -1073741819 (0xC0000005)

Мне кажется, проблема в видео, которое я сделал, но я не уверен.

1 Ответ

0 голосов
/ 07 апреля 2020

cv2.VideoWriter ожидает, что размер кадра будет таким же, как и размер кадра, который вы пишете. roi форма не (1280, 720).

import cv2

cap = cv2.VideoCapture('input.avi')
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('output.avi', fourcc, 25, (1280, 720))
writerInit = False
while True:
    ret, image_np = cap.read()
    if not ret:
        break;

    roi = image_np[300:1020, 0:1280]
    if(not writerInit):
        h,w,_ = roi.shape
        out = cv2.VideoWriter('output.avi', fourcc, 25, (w, h))
        writerInit = True

    out.write(roi)

cap.release()
out.release()
...