首页 > 解决方案 > 如何正确使用 OpenCV VideoWriter?

问题描述

我想裁剪视频的一个区域并保存它。我使用下面的代码来做到这一点。

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) 结束

我认为问题出在我制作的视频上,但我不确定。

标签: pythonopencvvideo-capture

解决方案


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()

推荐阅读