在 Python OpenCV 中制作裁剪帧的视频

Posted

技术标签:

【中文标题】在 Python OpenCV 中制作裁剪帧的视频【英文标题】:Making a video of cropped frames in Python OpenCV 【发布时间】:2020-02-24 19:02:21 【问题描述】:

在我的程序中,我正在阅读原始视频,然后裁剪每一帧,最后我需要制作所有裁剪帧的视频。 帧按我定义的大小(上、下、左和右)进行裁剪,但不会将其保存到视频中。 我正在尝试的是以下内容:

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】:

推荐的阶段是:readcropwrite 每次迭代。

我建议使用以下解决方案,而不是读取所有帧,然后裁剪所有帧然后写入所有帧:

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

【讨论】:

以上是关于在 Python OpenCV 中制作裁剪帧的视频的主要内容,如果未能解决你的问题,请参考以下文章

从捕获的帧中裁剪三角形 - OpenCV 和 C++

opencv python中的运动跟踪

badapple制作

裁剪,使用 ffmpeg 重新排列视频帧的中间

使用 Tensorflow Api 和 Opencv 在视频上裁剪检测到的对象

如何使用 python opencv 裁剪图像中最大的对象?