视频操作_01视频读写:视频读写+读取视频+保存视频

简介: 在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象

815902569f6a467a99304f9ac1482386.png


1 从文件中读取视频并播放


在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件:


1.创建读取视频的对象


cap = cv.VideoCapture(filepath)


参数:


       filepath: 视频文件路径



2.视频的属性信息


2.1. 获取视频的某些属性,


retval = cap.get(propId)


参数:


  • propId: 从0到18的数字,每个数字表示视频的属性


常用属性有:


20200407155733234.png


2.2 修改视频的属性信息


cap.set(propId,value)


参数:


  • proid: 属性的索引,与上面的表格相对应


  • value: 修改后的属性值


判断图像是否读取成功


 isornot = cap.isOpened()


若读取成功则返回true,否则返回False

获取视频的一帧图像


ret, frame = cap.read()


参数:


  • ret: 若获取成功返回True,获取失败,返回False


  • Frame: 获取到的某一帧的图像


调用cv.imshow()显示图像,在显示图像时使用cv.waitkey()设置适当的持续时间,如果太低视频会播放的非常快,如果太高就会播放的非常慢,通常情况下我们设置25ms就可以了。

最后,调用cap.realease()将视频释放掉


示例:


import numpy as np
import cv2 as cv
# 1.获取视频对象
cap = cv.VideoCapture('img/01.mp4')
# 2.判断是否读取成功
while(cap.isOpened()):
    # 3.获取每一帧图像
    #ret: 若获取成功返回True,获取失败,返回False 
    #Frame: 获取到的某一帧的图像
    ret, frame = cap.read() 
    # 4. 获取成功显示图像
    if ret == True:
        cv.imshow('frame',frame)
    # 5.每一帧间隔为25ms
    if cv.waitKey(25) & 0xFF == ord('q'):
        break
# 6.释放视频对象
cap.release()
cv.destroyAllwindows()


2 保存视频


在OpenCV中我们保存视频使用的是VedioWriter对象,在其中指定输出文件的名称,如下所示:


创建视频写入的对象


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


参数:


  • filename:视频保存的位置


  • fourcc:指定视频编解码器的4字节代码


  • fps:帧率


  • frameSize:帧大小


设置视频的编解码器,如下所示,


retval = cv2.VideoWriter_fourcc( c1, c2, c3, c4 )


参数:


  • c1,c2,c3,c4: 是视频编解码器的4字节代码,在fourcc.org中找到可用代码列表,与平台紧密相关,常用的有:


                       在Windows中:DIVX(.avi)


                       在OS中:MJPG(.mp4),DIVX(.avi),X264(.mkv)。


  • 利用cap.read()获取视频中的每一帧图像,并使用out.write()将某一帧图像写入视频中。


  • 使用cap.release()和out.release()释放资源。


示例:


import cv2 as cv
# 1. 读取视频
cap = cv.VideoCapture("img/01.mp4")
# 2. 获取图像的属性(宽和高),并将其转换为整数
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
# 3. 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
out = cv.VideoWriter('outpy.avi', cv.VideoWriter_fourcc('M', 'J', 'P', 'G'), 10, (frame_width, frame_height))
while (True):
    # 4.获取视频中的每一帧图像
    ret, frame = cap.read()
    if ret == True:
        # 5.将每一帧图像写入到输出文件中
        out.write(frame)
    else:
        break
# 6.释放资源
cap.release()
out.release()
cv.destroyAllWindows()


总结


读取视频:


  •        读取视频:cap = cv.VideoCapture()
  •        判断读取成功:cap.isOpened()
  •        读取每一帧图像:ret,frame = cap.read()
  •        获取属性:cap.get(proid)
  •        设置属性:cap.set(proid,value)
  •        资源释放:cap.release()


保存视频


  •        保存视频: out = cv.VideoWrite()
  •        视频写入:out.write()
  •        资源释放:out.release()
目录
相关文章
|
6月前
|
人工智能 BI
文件的读写
文件的读写。
40 0
|
1月前
|
Android开发
文件的读取
本文介绍了文件读取和写入操作的基本概念,包括输入输出流的创建、数据读取和写入以及流的关闭。
30 1
|
5月前
|
存储 固态存储 文件存储
磁盘文件的读写是怎样进行的
深入理解磁盘文件读写操作
|
6月前
|
存储 文件存储
<文件操作> 文件的打开与关闭,顺序读写,随机读写,二进制文件,读取结束的判定,文件缓冲区
<文件操作> 文件的打开与关闭,顺序读写,随机读写,二进制文件,读取结束的判定,文件缓冲区
41 1
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
|
6月前
|
存储 C语言
顺序读写数据文件
顺序读写数据文件
45 1
|
存储
按数据块读写文件存取学生信息
按数据块读写文件存取学生信息
【文件随机读写和文件缓冲区】
1.1fseek函数 根据文件指针的位置和偏移量来定位文件指针。 看不懂没关系,举个例子你就明白了。 我们首先在text.txt文件中放入 “abcdef” 这些字符。
|
存储 分布式计算 Hadoop
Spark的数据读取与保存之文件系统类数据读取与保存
Spark的数据读取与保存之文件系统类数据读取与保存
346 0