1.视频的读

1.1 捕获视频

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

参数:

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

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

例:

import cv2 as cvcap = cv.VideoCapture(0)#使用完资源后别忘记释放
cap.release()

1.2 检查视频是否初始化

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

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

  • 返回True那么初始化成功。
  • 返回False则使用open()打开它。
  • 当然也存在isOpened()总是返回False的情况,别慌,解决方法参考:https://blog.csdn.net/qq_27278957/article/details/90701073

例:

import cv2 as cvcap = 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 cvcap = 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 cvcap = 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 cvcap = 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 ...")breakframe = cv.flip(frame, 0)                    #写翻转的框架vedioWriter.write(frame)#这句可以不写,直接按q结束并输出视频。但是不写你就看不到视频录制时的画面。cv.imshow('frame', frame)if cv.waitKey(1) == ord('q'):breakcap.release()
vedioWriter.release()
cv.destroyAllWindows()

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

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

OpenCv视频读与存相关推荐

  1. OpenCv图像读存

    1.图像的读与存 1.1 图像读取 使用[cv.imread(参数1,参数2)]读出图像. 参数1:给出图片的路径,应在工作目录下或者给出绝对路径. 参数2:指定读出图片的方式,有以下3种方式. cv ...

  2. opencv视频处理和检测学习总结

    基于opencv的视频处理--基础数据结构 在一个封装的还算比较好的库中,一般都不会直接采用那些基本的数据结构像char, int 之类,一是 不具有可读性,二是不方便修改移植.通常是通过typede ...

  3. openCV视频操作(C++版本)

    openCV视频操作(C++版本) VideoCapture类详解 opencv的视频操作主要用到 VideoCapture类,有三个构造函数: VideoCapture::VideoCapture( ...

  4. python3 opencv 视频格式转换

    python3 opencv 视频格式转换: import cv2 #获得视频的格式 videoCapture = cv2.VideoCapture('ad3.avi') #获得码率及尺寸 fps = ...

  5. C++ OpenCV视频操作之图像输出文字

    前言 当我们视频分析时可能图像中需要有一个文字说明,OpenCV中本身也有这个API,我们就来看看OpenCV中的图像文字输出. 视频效果 函数API void putText( Mat& i ...

  6. OpenCV视频加速Video acceleration的实例(附完整代码)

    OpenCV视频加速Video acceleration的实例 OpenCV视频加速Video acceleration的实例 OpenCV视频加速Video acceleration的实例 #inc ...

  7. OpenCV视频中的人脸标志检测

    OpenCV视频中的人脸标志检测 视频中的人脸标志检测 简介 命令参数说明 源代码 视频中的人脸标志检测 简介 此应用程序使您可以检测视频中检测到的面部的地标.此应用程序首先检测当前视频帧中的面部,然 ...

  8. C++编程FFMpeg实时美颜直播推流实战-基于ffmpeg,qt5,opencv视频课程-夏曹俊-专题视频课程...

    C++编程FFMpeg实时美颜直播推流实战-基于ffmpeg,qt5,opencv视频课程-11788人已学习 课程介绍         C++编程FFMpeg实时美颜直播推流实战视频培训教程,本课程 ...

  9. OpenCV 视频地址和图片地址注意事项

    OpenCV 视频地址和图片地址注意事项 图片地址 视频地址 如何快速打开该目录 地址中的'\'和'/'区别 图片地址 这四行代码都表示5图片52.jpg的路径 Mat srcImage = imre ...

最新文章

  1. BERT新转变:面向视觉基础进行预训练
  2. 上汽接入Momenta飞轮,成为中国第一个落地RoboTaxi的车企
  3. 【Android 逆向】Android 进程注入工具开发 ( 远程调用总结 | 远程调用注意事项 )
  4. USACO 1.3-Combination Lock
  5. oracle01507报错,oracle报错ORA-01507
  6. jquery 中 fn.apply(this, arguments)是什么函数?有什么作用?能举个例子吗
  7. python编程狮_python编程狮app
  8. 黑马程序员 HTML基础
  9. 测试ai模糊软件,“马赛克视频”AI还原软件被疯传!测试效果出乎意料!
  10. 树莓派GPIO引脚介绍
  11. 手把手教你搭建免流服务器(只限于联通)
  12. 未来科技蒲公英大飞_大烟草的下跌告诉我们关于大科技的未来
  13. 量化中获取A股交易日信息
  14. 1bit 寄存器 coursera
  15. 如何做好提升领导力培训PPT课件?
  16. 解算法题的五个基本思路
  17. Codeforces Round #512 (Div. 2 E. Vasya and Good Sequences 异或问题
  18. 【Mybatis】Mybatis学习由浅入深(二)
  19. mysql更新等差数列求和公式_shell学习笔记(6)
  20. Axure RP 9.0.0.3719 更新日志 授权码

热门文章

  1. ai如何旋转画布_ai中怎么使用旋转工具制作旋转对称图?ai中使用旋转工具制作旋转对称图的方法...
  2. 创业公司路演PPT模板
  3. sd卡U盘异常检测程序
  4. 根据身份证号,获取指定格式出生年月日
  5. 系统安装部署系列教程(二):硬盘安装方式安装系统
  6. HP PSC 系列一体机性能比较列表
  7. 【Vue3 第十四章】父子组件通信
  8. TIPC Cluster5
  9. 关于CSS选择器的权重计算
  10. 极光笔记丨百亿级数据的实时存取优化与实践