为了账号安全,请及时绑定邮箱和手机立即绑定

使用 opencv 调整视频大小并保存

使用 opencv 调整视频大小并保存

LEATH 2023-07-18 10:39:24
我正在尝试使用 opencv 重新调整视频大小,然后将其保存回我的系统。代码有效并且不会给出任何错误,但输出视频文件已损坏。我使用的 fourcc 是 mp4v,与 .mp4 配合良好,但输出视频仍然损坏。需要帮忙。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()
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

问题是VideoWriter初始化。


您初始化了:


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

最后一个参数的0意思是,isColor = False。您告诉我们,您要将帧转换为灰度然后保存。但是您的代码中没有转换。


此外,您还根据compress参数调整代码中每个框架的大小。


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


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

现在我们已经VideoWriter用所需的尺寸初始化了 。


完整代码:


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参数,该怎么办?


答案:那么你需要将框架更改为灰色图像:


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)


查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信