Python – 使用Opencv-Python库获取本机摄像头视频并保存为视频文件
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()
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Python – 使用Opencv-Python库获取本机摄像头视频并保存为视频文件
原文链接:https://www.stubbornhuang.com/1212/
发布于:2021年03月18日 17:14:18
修改于:2023年06月26日 21:48:42
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50