OpenCv视频读与存
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视频读与存相关推荐
- OpenCv图像读存
1.图像的读与存 1.1 图像读取 使用[cv.imread(参数1,参数2)]读出图像. 参数1:给出图片的路径,应在工作目录下或者给出绝对路径. 参数2:指定读出图片的方式,有以下3种方式. cv ...
- opencv视频处理和检测学习总结
基于opencv的视频处理--基础数据结构 在一个封装的还算比较好的库中,一般都不会直接采用那些基本的数据结构像char, int 之类,一是 不具有可读性,二是不方便修改移植.通常是通过typede ...
- openCV视频操作(C++版本)
openCV视频操作(C++版本) VideoCapture类详解 opencv的视频操作主要用到 VideoCapture类,有三个构造函数: VideoCapture::VideoCapture( ...
- python3 opencv 视频格式转换
python3 opencv 视频格式转换: import cv2 #获得视频的格式 videoCapture = cv2.VideoCapture('ad3.avi') #获得码率及尺寸 fps = ...
- C++ OpenCV视频操作之图像输出文字
前言 当我们视频分析时可能图像中需要有一个文字说明,OpenCV中本身也有这个API,我们就来看看OpenCV中的图像文字输出. 视频效果 函数API void putText( Mat& i ...
- OpenCV视频加速Video acceleration的实例(附完整代码)
OpenCV视频加速Video acceleration的实例 OpenCV视频加速Video acceleration的实例 OpenCV视频加速Video acceleration的实例 #inc ...
- OpenCV视频中的人脸标志检测
OpenCV视频中的人脸标志检测 视频中的人脸标志检测 简介 命令参数说明 源代码 视频中的人脸标志检测 简介 此应用程序使您可以检测视频中检测到的面部的地标.此应用程序首先检测当前视频帧中的面部,然 ...
- C++编程FFMpeg实时美颜直播推流实战-基于ffmpeg,qt5,opencv视频课程-夏曹俊-专题视频课程...
C++编程FFMpeg实时美颜直播推流实战-基于ffmpeg,qt5,opencv视频课程-11788人已学习 课程介绍 C++编程FFMpeg实时美颜直播推流实战视频培训教程,本课程 ...
- OpenCV 视频地址和图片地址注意事项
OpenCV 视频地址和图片地址注意事项 图片地址 视频地址 如何快速打开该目录 地址中的'\'和'/'区别 图片地址 这四行代码都表示5图片52.jpg的路径 Mat srcImage = imre ...
最新文章
- BERT新转变:面向视觉基础进行预训练
- 上汽接入Momenta飞轮,成为中国第一个落地RoboTaxi的车企
- 【Android 逆向】Android 进程注入工具开发 ( 远程调用总结 | 远程调用注意事项 )
- USACO 1.3-Combination Lock
- oracle01507报错,oracle报错ORA-01507
- jquery 中 fn.apply(this, arguments)是什么函数?有什么作用?能举个例子吗
- python编程狮_python编程狮app
- 黑马程序员 HTML基础
- 测试ai模糊软件,“马赛克视频”AI还原软件被疯传!测试效果出乎意料!
- 树莓派GPIO引脚介绍
- 手把手教你搭建免流服务器(只限于联通)
- 未来科技蒲公英大飞_大烟草的下跌告诉我们关于大科技的未来
- 量化中获取A股交易日信息
- 1bit 寄存器 coursera
- 如何做好提升领导力培训PPT课件?
- 解算法题的五个基本思路
- Codeforces Round #512 (Div. 2 E. Vasya and Good Sequences 异或问题
- 【Mybatis】Mybatis学习由浅入深(二)
- mysql更新等差数列求和公式_shell学习笔记(6)
- Axure RP 9.0.0.3719 更新日志 授权码