用Python OpenCV剪裁帧并制作视频

4

在我的程序中,我正在读取一个原始视频,然后裁剪每一帧,最后需要制作所有裁剪帧的视频。
这些帧是按照我定义的大小(上、下、左和右)进行裁剪的,但它并没有保存到视频中。
我正在尝试以下操作:

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个回答

3
推荐的步骤是:每次迭代读取裁剪写入
我建议采用以下解决方案,而不是先读取所有帧,然后裁剪所有帧再写入所有帧:
  • while循环之前打开输入和输出视频文件。
  • 在循环内的每个迭代中:读取一帧,将其裁剪并将结果写入输出视频。
  • 最后,使用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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接