Python OpenCV实现摄像头视频捕获、播放与保存教程

Ruby
Ruby
发布时间:2026-10-16 | 5人浏览过
原创

本文详细介绍如何使用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视频处理相关内容,欢迎查阅本站往期文章或继续关注后续更新,感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表