Python – 使用Opencv-Python库获取本机摄像头视频并保存为视频文件
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Python – 使用Opencv-Python库获取本机摄像头视频并保存为视频文件
原文链接:https://www.stubbornhuang.com/1212/
发布于:2021年03月18日 17:14:18
修改于:2021年03月18日 17:14:18
1 Opencv-Python获取本机摄像头视频
1.1 视频捕获
- 为了捕获本机摄像头的视频,需要创建一个VideoCapture对象,如果需要处理视频文件,则在构造对象时传入视频文件路径,如果需要捕获摄像头视频,则需要传入本机摄像头设备索引,如果电脑上只有一个摄像头,那么一般传入0,如果有多个摄像头,则根据需要传入响应摄像头的索引。
- cap.read():通常返回一个布尔值,如果视频流能被正确读取,那么发挥True,如果视频流不能被正确读取则返回False。
- cap.isOpened():检测cap是否初始化成功,如果返回True,则初始化成都,否则使用cap.open()打开cap
- cap.get(propId)/cap.set(propId, value):可以用于获取视频/设置视频的一些属性,propId具体含义如下:
propId | 参数 | 描述 |
---|---|---|
0 | cv2.CAP_PROP_POS_MSEC | 视频文件的当前位置(以毫秒为单位)或视频捕获时间戳记 |
1 | cv2.CAP_PROP_POS_FRAMES | 接下来要解码/捕获的帧的基于0的索引 |
2 | cv2.CAP_PROP_POS_AVI_RATIO | 视频文件的相对位置:0-开始,1-结束 |
3 | cv2.CAP_PROP_FRAME_WIDTH | 视频流中帧的宽度 |
4 | cv2.CAP_PROP_FRAME_HEIGHT | 视频流中帧的高度 |
5 | cv2.CAP_PROP_FPS | 视频帧率 |
6 | cv2.CAP_PROP_FOURCC | 4个字符表示的视频编码器格式 |
7 | cv2.CAP_PROP_FRAME_COUNT | 视频总帧数 |
8 | cv2.CAP_PROP_FORMAT | byretrieve()返回的Mat对象的格式 |
9 | cv2.CAP_PROP_MODE | 当前的捕获模式 |
10 | cv2.CAP_PROP_BRIGHTNESS | 图像亮度(仅适用于相机) |
11 | cv2.CAP_PROP_CONTRAST | 图像对比度(仅适用于相机) |
12 | cv2.CAP_PROP_SATURATION | 图像饱和度(仅适用于相机) |
13 | cv2.CAP_PROP_HUE | 图像的色相(仅适用于相机) |
14 | cv2.CAP_PROP_GAIN | 图像增益(仅适用于相机) |
15 | cv2.CAP_PROP_EXPOSURE | 曝光(仅适用于相机) |
16 | cv2.CAP_PROP_CONVERT_RGB | 布尔标志,指示是否应将图像转换为RGB |
17 | cv2.CAP_PROP_WHITE_BALANCE | |
18 | cv2.CAP_PROP_RECTIFICATION | 立体摄像机的整流标志 |
19 | cv2.CV_CAP_PROP_ISO_SPEED | 相机的ISO感光度 |
20 | cv2.CV_CAP_PROP_BUFFERSIZE | 内部缓冲存储器中存储的帧数 |
1.2 视频写
保存视频使用的是VideoWriter对象,
VideoWriter(filename, fourcc, fps, frameSize, isColor)
- filename : 需要保存的视频文件名
- fourcc : 视频编码
- fps : 自定义的视频帧率
- frameSize : 视频帧分辨率
- isColor : 黑白画面还是彩色的画面
其中fourcc可以通过以下方式创建:
fourcc = cv2.VideoWriter_fourcc('x', 'v', 'i', 'd')
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
fourcc = cv2.VideoWriter_fourcc(*'xvid')
2 Opencv-Python捕获本机摄像头视频显示
# -*- coding: UTF-8 –*-
import cv2
cap = cv2.VideoCapture(0)
# 判断摄像头是否打开
while(cap.isOpened()):
# 从摄像头获取帧数据
ret, frame = cap.read()
if ret:
# 显示帧数据
cv2.imshow('frame', frame)
# 如果检测到了按键q则退出,不再显示摄像头并且保存视频文件
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头
cap.release()
# 删除全部窗口
cv2.destroyAllWindows()
3 Opencv-Python捕获本机摄像头视频并保存为视频
# -*- coding: UTF-8 –*-
import cv2
cap = cv2.VideoCapture(0)
camera_width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
camera_height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
video_width = int(camera_width)
video_height = int(camera_height)
# 设置相机宽度
cap.set(cv2.CAP_PROP_FRAME_WIDTH,video_width)
# 设置相机高度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,video_height)
# 设置视频编码,帧率,宽高
video_fourcc = cv2.VideoWriter_fourcc(*'XVID')
video_writer = cv2.VideoWriter(r'./output.avi', video_fourcc,30,(video_width,video_height))
# 判断摄像头是否打开
while(cap.isOpened()):
# 从摄像头获取帧数据
ret, frame = cap.read()
if ret:
# 显示帧数据
cv2.imshow('frame', frame)
# 向文件中写入帧数据
video_writer.write(frame)
# 如果检测到了按键q则退出,不再显示摄像头并且保存视频文件
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头
cap.release()
# 释放videowriter
video_writer.release()
# 删除全部窗口
cv2.destroyAllWindows()
当前分类随机文章推荐
- Python - 运算符/、//和%的含义与区别 阅读485次,点赞0次
- Python - 获取当前py脚本文件所在的目录路径 阅读767次,点赞0次
- Python - 运算符/ or // or %的含义和区别 阅读1909次,点赞0次
- Python - 使用命令行调用ffmpeg修改视频帧率,将60FPS的视频修改为30FPS的视频,视频时间保持不变 阅读474次,点赞0次
- 解决Python爬虫在爬资源过程中使用urlretrieve函数下载文件不完全且避免下载时长过长陷入死循环,并在下载文件的过程中显示下载进度 阅读4054次,点赞0次
- Python - 字典dict遍历方法总结 阅读668次,点赞0次
- Python - BeautifulSoup的find()和findAll() 阅读2852次,点赞0次
- Python - 不定长函数参数列表 阅读2090次,点赞0次
- Python - list/numpy/pytorch tensor相互转换 阅读1731次,点赞0次
- Python3爬虫 - 下载反盗链图片的方式 阅读2826次,点赞1次
全站随机文章推荐
- 资源分享 - Game Engine Gems 1英文高清PDF下载 阅读2344次,点赞0次
- C++ - 导出接口函数和导出C++类 阅读396次,点赞0次
- 资源分享 - Digital Character Development - Theory and Practice , Second Edition 英文高清PDF下载 阅读1499次,点赞0次
- Python - opencv-python保存视频时出现Failed to load OpenH264 library: openh264-1.8.0-win64.dll错误 阅读1055次,点赞0次
- C++ - windows、linux跨平台递归创建多级目录 阅读199次,点赞0次
- C++ - 使用Websocket++编写客户端连接WebSocket服务器并进行通信 阅读4382次,点赞3次
- Pytorch - 创建随机Tensor的常用方法 阅读255次,点赞0次
- OnnxRuntime - 模型部署笔记1,OnnxRuntime简介 阅读193次,点赞0次
- Pytorch - torch.distributed.init_process_group函数详解 阅读624次,点赞0次
- 工具网站推荐 - 欧拉角四元数在线可视化转化网站/三维在线旋转变换网站 阅读10503次,点赞6次
评论
169