Python OpenCV实现摄像头视频捕获、播放与保存教程
本文详细介绍如何使用Python和OpenCV库实现摄像头的视频捕获、实时播放以及视频文件保存功能。内容涵盖从相机或文件读取视频流、控制播放帧率、配置VideoWriter参数(如FourCC编解码器、帧率、分辨率)以及完整的代码示例,帮助开发者快速掌握基础视频处理技术。
此前有读者在粉丝群中提出疑问:
如何利用Python提升视频的清晰度与对比度?
由于此前未深入涉及Python视频处理领域,当时只能遗憾地告知读者暂未覆盖该部分内容。
经过思考,决定补充这一板块的知识,既是为了拓展自身技术视野,也是为了解答粉丝的疑惑。
今日首先分享Python处理视频的基础操作,主要包含视频的读取、播放及保存功能。
视频读取
实现视频捕获需实例化一个 对象,其参数可指定设备索引号或视频文件路径。因此,读取视频主要有两种途径:从摄像头获取视频流或从本地文件读取视频。
从摄像头读取视频
对于配备摄像头的设备(如笔记本电脑),可直接调用内置摄像头读取视频流。
import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
break
# 显示结果帧
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
# 完成所有操作后,释放捕获器
cap.release()
cv.destroyAllWindows()此处向 VideoCapture 对象传入参数 0,该参数代表设备索引号,即指定使用哪个摄像头。通常情况下,单个摄像头会被默认连接(如本例情况),因此直接传入0即可。若需选择第二个摄像头,可传入1,依此类推。
使用 cap.isOpened() 方法判断视频捕获是否成功。
cap.read() 方法返回布尔值(True或False)。若成功读取到视频帧,返回值将为True。通过检查此返回值,可以判断视频是否已播放至末尾。
利用 cv.imshow 方法显示视频帧。视频播放的基本原理即逐帧渲染显示。
操作结束后,务必通过 cap.release() 释放捕获资源。
执行上述代码,即可弹出窗口实时播放电脑摄像头捕捉的画面。
从文件播放视频
从文件读取视频的流程与从摄像头捕获类似,仅需将设备索引替换为视频文件路径即可。
此外,在视频显示过程中,可通过 cv.waitKey() 函数控制播放速度。若该值设置过小,视频播放速度将加快(类似倍速播放);若设置过大,视频播放速度将变慢(类似延迟播放)。通常设置为25毫秒即可满足正常播放需求。
import cv2 as cv
cap = cv.VideoCapture('video.mp4')
while cap.isOpened():
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
break
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
cap.release()
cv.destroyAllWindows()
运行该段代码,即可弹出窗口播放所选的视频文件。
视频保存
在从摄像头读取视频的过程中,可将处理后的视频保存至本地。通过逐帧捕获并处理视频,若需保存视频,只需调用 cv.VideoWriter() 函数即可实现。
cv.VideoWriter() 函数包含5个关键参数:
- 参数1:指定输出文件的名称,例如 output.mp4。
- 参数2:FourCC代码,即用于指定视频编解码器的4字节代码。
- 参数3:设定视频的帧率(FPS)。
- 参数4:设定视频帧的尺寸(宽度和高度)。
- 参数5:颜色标志。若设为True,则输出彩色视频;若设为False,则输出灰度视频。
关于 FourCC 代码与常见视频格式的对应关系,列举部分常用格式如下:
cv2.VideoWriter_fourcc('P','I','M','1') 对应 MPEG-1 编解码器
cv2.VideoWriter_fourcc('M','J','P','G') 对应 motion-jpeg 编解码器,通常保存为 mp4v 格式
cv2.VideoWriter_fourcc('M', 'P', '4', '2') 对应 MPEG-4.2 编解码器
cv2.VideoWriter_fourcc('D', 'I', 'V', '3') 对应 MPEG-4.3 编解码器
cv2.VideoWriter_fourcc('D', 'I', 'V', 'X') 对应 MPEG-4 编解码器,通常保存为 avi 格式
cv2.VideoWriter_fourcc('U', '2', '6', '3') 对应 H263 编解码器
cv2.VideoWriter_fourcc('I', '2', '6', '3') 对应 H263I 编解码器
cv2.VideoWriter_fourcc('F', 'L', 'V', '1') 对应 FLV1 编解码器
保存视频的核心代码如下:
import cv2 as cv
cap = cv.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'MJPG')
out = cv.VideoWriter('output.mp4', fourcc, 20.0, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame = cv.flip(frame, 1)
# 写翻转的框架
out.write(frame)
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
# 完成工作后释放所有内容
cap.release()
out.release()
cv.destroyAllWindows()
执行该段代码后,在代码运行目录下即可生成一个名为 output.mp4 的视频文件。
在上述代码运行期间,若需退出视频处理流程,只需按下键盘上的 q 键即可。
至此,关于基于Python实现摄像头视频捕获、播放及保存的教程已介绍完毕。如需了解更多Python视频处理相关内容,欢迎查阅本站往期文章或继续关注后续更新,感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









