win10+Python3.7.3+OpenCV3.4.1入门学习(十八 视频处理)————18.2 VideoWriter类

Python版本是Python3.7.3,OpenCV版本OpenCV3.4.1,开发环境为PyCharm

18.2 VideoWriter类

OpenCV中的cv2.VideoWriter类可以将图片序列保存成视频文件,也可以修改视频的各种属性,还可以完成对视频类型的转换。

18.2.1 类函数介绍

cv2.VideoWriter类常用的成员函数包括:构造函数、write函数等。本节简单介绍这两个常用的函数。
1.构造函数
OpenCV为cv2.VideoWriter类提供了构造函数,用它来实现初始化工作。该函数的语法格式是:

<VideoWriter object> = cv2.VideoWriter( filename, fourcc, fps, frameSize[,
isColor] )

式中:
● filename指定输出目标视频的存放路径和文件名。如果指定的文件名已经存在,则会覆盖这个文件。
● fourcc表示视频编/解码类型(格式)。在OpenCV中用函数cv2.VideoWriter_fourcc()来指定视频编码格式。cv2.VideoWriter_fourcc()有4个字符参数。这4个字符参数构成了编/解码器的“4字标记”,每个编/解码器都有一个这样的标记。下面列出几个常用的标记。
● cv2.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’)表示未压缩的YUV颜色编码格式,色度子采样为4:2:0。该编码格式具有较好的兼容性,但产生的文件较大,文件扩展名为.avi。
● cv2.VideoWriter_fourcc(‘P’,‘I’, ‘M’, ‘I’)表示MPEG-1编码类型,生成的文件的扩展名为.avi。
● cv2.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’)表示MPEG-4编码类型。如果希望得到的视频大小为平均值,可以选用这个参数组合。该组合生成的文件的扩展名为.avi。
● cv2.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’)表示Ogg Vorbis编码类型,文件的扩展名为.ogv。
● cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘I’)表示Flash视频,生成的文件的扩展名为.flv。
欲知更多的字符参数组合,可以在网站http://www.fourcc.org上查询。若参数fourcc为“-1”,则程序运行时会弹出一个对话框,如图18-3所示。在该对话框中,用户可以根据自己的需要选择合适的压缩程序和压缩质量。

在这里插入图片描述

● fps为帧速率。
● frameSize为每一帧的长和宽。
● isColor表示是否为彩色图像。
例如,下面的语句完成了cv2.VideoWriter类的初始化工作:

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20, (1024,768))

如果希望通过如图18-3所示对话框设置编/解码格式,可以使用语句:

fourcc = -1
out = cv2.VideoWriter('output.avi', fourcc, 20, (1024,768))

2. write函数
cv2.VideoWriter类中的函数cv2.VideoWriter.write()用于写入下一帧视频。该函数的语法格式为:

None=cv2.VideoWriter.write(image)

式中,image是要写入的视频帧。通常情况下,要求彩色图像的格式为BGR模式。
在调用该函数时,直接将要写入的视频帧传入该函数即可。例如,有一个视频帧为frame,要将其写入上面的示例中名为out的cv2.VideoWriter类对象内,则使用语句:

out.write(frame)

上述语句会把frame传入名为output.avi的out对象内。
3.释放
在不需要cv2.VideoWriter类对象时,需要将其释放。释放该类对象时所使用的是函数cv2.VideoWriter.release()。该函数的语法格式是:

None = cv2.VideoWriter.release( )

例如,当前有一个cv2.VideoWriter类的对象out,可以用以下语句将其释放:

out.release()
18.2.2 保存视频

保存视频包括创建对象、写入视频、释放对象等多个步骤,下面对各个步骤做简单的介绍。
1.创建对象
在创建对象前,首先需要设置好参数。
● 设置好要保存的具体文件名,例如:filename=’‘out.avi’’。
● 使用cv2.VideoWriter_fourcc()确定编/解码的类型,例如:fourcc =cv2.VideoWriter_fourcc(*‘XVID’)。
● 确定视频的帧速率,例如:fps=20。
● 确定视频的长度和宽度,例如:size=(640,480)。
然后利用上述参数,创建对象。例如:

out = cv2.VideoWriter( filename , fourcc , fps , size )

当然,也可以直接在构造函数内用需要的参数值创建对象。例如:

out = cv2.VideoWriter('out.avi', fourcc, 20,(640,480))

2.写入视频
用函数cv2.VideoWriter.write()在创建的对象out内写入读取到的视频帧frame。使用的代码为:

out.write(frame)

3.释放对象
在完成写入后,释放对象out。代码为:

out.release()

eg1:使用cv2.VideoWriter类保存摄像头视频文件。
代码如下:

import cv2
cap = cv2.VideoCapture(0)
fourcc = -1
out = cv2.VideoWriter('output.avi',fourcc, 20, (640,480))
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        out.write(frame)
        cv2.imshow('frame',frame)
        if cv2.waitKey(1) == 27:
            break
    else:
        break
cap.release()
out.release()
cv2.destroyAllWindows()

#按Esc 键,退出视频录制

运行上述程序,程序就会捕获当前摄像头的视频内容,并将其保存在当前目录下名为“output.avi”的视频文件中。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值