OpenCv视频读与存

1.视频的读

1.1 捕获视频

使用【cv.VedioCapture(参数)】来打开视频,并读取视频的帧。

参数:

若要打开视频文件,则参数是文件路径:cv.VideoCapture(const string& filename)

若要打开摄像头设备,则是0开始的整数:cv.VideoCapture(int device)

例:

import cv2 as cv

cap = cv.VideoCapture(0)

#使用完资源后别忘记释放
cap.release()

1.2 检查视频是否初始化

要注意打开视频存在有失败的可能,那么怎么验证视频打开成功以便后续的操作呢?

可以通过【isOpened()】方法检查它是否已初始化。

例:

import cv2 as cv

cap = cv.VideoCapture(0)

if not cap.isOpened():            #cap为1.1中捕获的视频对象
    print("Cannot open camera")
    exit()
while True:
    #操作

#使用完资源后别忘记释放
cap.release()

1.3 开始读取视频的每一帧

这里当然也要检查是否正确读取到帧对吧?这就是【read()】的作用。

使用方法:

ret, frame = cap.read()    #cap为1.1、1.2节中的捕获的视频对象。

如果正确读取了帧:

  • ret为Ture。
  • frame为一帧一帧的视频。

例:

import cv2 as cv

cap = cv.VideoCapture(0)

if not cap.isOpened():
    print("Cannot open camera")
    exit()
while True:

    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    #在框架上的操作到这里
    #用户的操作

# 完成所有操作后,释放捕获器
cap.release()

1.4 在操作中可能获取或修改视频参数

①【cv2.VedioCapture().get(参数)】获得视频属性

参数:可用整数0~18简单代表视频某一属性值,详情见下表:

注意:如果输入的参数不在0~18内,将会返回0。

0视频文件的当前位置(播放)以毫秒为单位
1基于以0开始的被捕获或解码的帧索引
2视频文件的相对位置(播放):0=电影开始,1=影片的结尾。
3在视频流的帧的宽度
4在视频流的帧的高度
5帧速率
6编解码的4字-字符代码
7视频文件中的帧数
8返回对象的格式
9返回后端特定的值,该值指示当前捕获模式
10图像的亮度(仅适用于照相机)
11图像的对比度(仅适用于照相机)
12图像的饱和度(仅适用于照相机)
13色调图像(仅适用于照相机)
14图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
15曝光(仅适用于照相机)
16指示是否应将图像转换为RGB布尔标志
17× 暂时不支持
18立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)

②【cv2.VedioCapture().set(参数1,参数2)】修改视频属性

参数1:0~18,同get()参数。

参数2:想要设置的值。

使用方法:

import cv2 as cv

cap = cv.VideoCapture(0)

if not cap.isOpened():
    print("Cannot open camera")
    exit()
while True:

    #注意操作的对象,正确示范:
    cap.set(3,320)
    cap.set(4,240)

    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    #错误示范,操作对象不为cv::VideoCapture实例
    #frame.set(3,320)
    #frame.set(4,240)

cap.release()

1.5 对视频的其他常见操作

①正常播放:

②灰度处理:

③反转处理:

具体结果可参考https://blog.csdn.net/qq_40344897/article/details/105069145

2.视频的存

2.1 创建视频输出对象

使用【cv2.VideoWriter(参数1,参数2,参数3,参数4)】来创建视频输出对象。

参数1:给输出的视频设置的名称,因此要保存一个视频要设置一个输出对象。

参数2:设置保存视频的编码,使用【cv2.VideoWriter_fourcc(参数)】进行设置,2.2中详细介绍。

参数3:设置保存视频的帧率。

参数4:设置保存视频的宽高。

例:

fourcc = cv.VideoWriter_fourcc(*'XVID')    #参数2
vedioWriter = cv.VideoWriter('output.avi',fourcc,20.0,(640,  480))

2.2 确定视频的编码格式

使用【cv2.VideoWriter_fourcc(参数)】来设置输出视频的编码格式。

参数:

①参数种类有很多,可自己设置,具体参照FOURCC四字符码对照表

②可在第一次保存视频时将参数先设置为-1,运行程序结束查看可使用的编码格式。

例:

#参数设置的第一种方式
fourcc = cv.VideoWriter_fourcc(*'XVID');
vedioWriter = cv.VideoWriter('output.avi',fourcc, 20.0, (640,  480))

#参数设置的第二种方式
fourcc = cv.VideoWriter_fourcc('X', 'V', 'I', 'D');
vedioWriter = cv.VideoWriter('output.avi',fourcc, 20.0, (640,  480))

另附上视频编解码基础:https://www.jianshu.com/p/591745d73156

2.3 输出视频

使用【cv2.VideoWriter(参数1,参数2,参数3,参数4).write(参数5)】来输出视频。

参数5:只能是cv.VedioCapture().read()读到的帧,不要直接使用cv.VedioCapture对象。

例:

import cv2 as cv

cap = cv.VideoCapture(0)

#定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'XVID');
vedioWriter = cv.VideoWriter('output.avi',fourcc, 20.0, (640,  480))

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break

    frame = cv.flip(frame, 0)                    #写翻转的框架
    vedioWriter.write(frame)

    #这句可以不写,直接按q结束并输出视频。但是不写你就看不到视频录制时的画面。
    cv.imshow('frame', frame)

    if cv.waitKey(1) == ord('q'):
        break

cap.release()
vedioWriter.release()
cv.destroyAllWindows()

运行成功,视频录制并保存~

3.哥哥哥哥,留下三连你女朋友知道了不会生气吧

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东东咚咚东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值