使用 opencv 调整视频大小并保存 [英] Resizing video using opencv and saving it

查看:764
本文介绍了使用 opencv 调整视频大小并保存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 opencv 重新调整视频大小,然后将其保存回我的系统.代码有效并且没有出现任何错误,但输出视频文件已损坏.我使用的 Fourcc 是 mp4v 与 .mp4 配合良好,但输出视频仍然损坏.需要帮助.

I'm trying to re-size the video using opencv and then save it back to my system.The code works and does not give any error but output video file is corrupted. The fourcc I am using is mp4v works well with .mp4 but still the output video is corrupted. Need Help.

import numpy as np
    import cv2
    import sys
    import re
    vid=""
    
    if len(sys.argv)==3:
        vid=sys.argv[1]
        compress=int(sys.argv[2])
    else:
        print("File not mentioned or compression not given")
        exit()
    
    if re.search('.mp4',vid):
        print("Loading")
    else:
        exit()
    
    cap = cv2.VideoCapture(0)
    ret, frame = cap.read()
    
    def rescale_frame(frame, percent=75):
        width = int(frame.shape[1] * percent/ 100)
        height = int(frame.shape[0] * percent/ 100)
        dim = (width, height)
        return cv2.resize(frame, dim, interpolation =cv2.INTER_AREA)
    
    FPS= 15.0
    FrameSize=(frame.shape[1], frame.shape[0])
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    
    out = cv2.VideoWriter('Video_output.mp4', fourcc, FPS, FrameSize, 0)
    
    while(cap.isOpened()):
        ret, frame = cap.read()
    
        # check for successfulness of cap.read()
        if not ret: break
        
        rescaled_frame=rescale_frame(frame,percent=compress)
        # Save the video
        out.write(rescaled_frame)
    
        cv2.imshow('frame',rescaled_frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
             break
    
    cap.release()
    out.release()
    cv2.destroyAllWindows()

推荐答案

问题在于 VideoWriter 初始化.

您已初始化:

out = cv2.VideoWriter('Video_output.mp4', fourcc, FPS, FrameSize, 0)

最后一个参数 0 表示,isColor = False.您是在说,您要将帧转换为灰度,然后保存.但是您的代码中没有转换.

The last parameter 0 means, isColor = False. You are telling, you are going to convert frames to the grayscale and then saves. But there is no conversion in your code.

此外,您正在根据 compress 参数调整代码中每个帧的大小.

Also, you are resizing each frame in your code based on compress parameter.

如果我使用默认的压缩参数:

If I use the default compress parameter:

cap = cv2.VideoCapture(0)

if cap.isOpened():
    ret, frame = cap.read()
    rescaled_frame = rescale_frame(frame)
    (h, w) = rescaled_frame.shape[:2]
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    writer = cv2.VideoWriter('Video_output.mp4',
                             fourcc, 15.0,
                             (w, h), True)
else:
    print("Camera is not opened")

Now we have initialized the `VideoWriter` with the desired dimension.

Code:
***
```python
import time
import cv2


def rescale_frame(frame_input, percent=75):
    width = int(frame_input.shape[1] * percent / 100)
    height = int(frame_input.shape[0] * percent / 100)
    dim = (width, height)
    return cv2.resize(frame_input, dim, interpolation=cv2.INTER_AREA)


cap = cv2.VideoCapture(0)

if cap.isOpened():
    ret, frame = cap.read()
    rescaled_frame = rescale_frame(frame)
    (h, w) = rescaled_frame.shape[:2]
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    writer = cv2.VideoWriter('Video_output.mp4',
                             fourcc, 15.0,
                             (w, h), True)
else:
    print("Camera is not opened")

while cap.isOpened():
    ret, frame = cap.read()

    rescaled_frame = rescale_frame(frame)

    # write the output frame to file
    writer.write(rescaled_frame)

    cv2.imshow("Output", rescaled_frame)
    key = cv2.waitKey(1) & 0xFF
    if key == ord("q"):
        break


cv2.destroyAllWindows()
cap.release()
writer.release()

可能的问题:我不想更改我的 VideoWriter 参数,我该怎么办?

答案:然后你需要改变你的框架,到灰色图像:

Answer: Then you need to change your frames, to the gray image:

while cap.isOpened():
    # grab the frame from the video stream and resize it to have a
    # maximum width of 300 pixels
    ret, frame = cap.read()

    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

这篇关于使用 opencv 调整视频大小并保存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆