找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

771

积分

0

好友

97

主题
发表于 5 小时前 | 查看: 1| 回复: 0

本文将通过几个核心示例,快速介绍如何使用 Python 的 OpenCV 库进行摄像头调用、视频文件读取以及视频录制与保存。

首先理解一个关键概念:。一帧就是一张静态图片。我们常说的 60 帧每秒(60 fps),即代表 1 秒钟内展示了 60 张连续的图片。

调用电脑摄像头

OpenCV 使用 VideoCapture 类来便捷地访问摄像头。通过调用 VideoCapture 对象的 read() 函数即可逐帧读取视频流数据。

read() 函数返回一个包含两个元素的元组 (flag, frame)。其中:

  • flag:一个布尔值(True/False),True 表示成功读取到一帧数据。
  • frame:读取到的图像数据(一个 NumPy 数组)。

计算机为每个摄像头设备分配了一个索引号。如果电脑只有一个摄像头,其索引通常为 0;若有多个,则依次编号为 0, 1, 2…

如何用代码打开摄像头读取数据呢?请看下面的完整示例:

import cv2

# 打开第一个摄像头(索引为0)
cap = cv2.VideoCapture(0)

# 循环读取数据
while True:
    # 读取一帧数据,返回 标记和一帧数据。
    # 读取到数据 flag=True,没读到数据 flag=False
    flag, frame = cap.read()

    # 如果没读到数据,则退出循环
    if not flag:
        break

    # 显示读取到的这一帧图片
    cv2.imshow("frame", frame)
    # 设置播放帧率。例如30帧,表示1秒显示30张图片,每张图间隔约33毫秒 (1000//30)
    key = cv2.waitKey(1000 // 30)
    # 按下键盘上的 'q' 键,退出循环
    if key == ord('q'):
        break

# 释放摄像头资源并关闭所有OpenCV创建的窗口
cap.release()
cv2.destroyAllWindows()

这段代码是使用 OpenCV 进行计算机视觉处理的起点。运行后,你将看到一个实时显示摄像头画面的窗口。

读取本地视频文件

读取视频文件的操作与调用摄像头非常相似,同样是使用 VideoCapture 类,只需将参数从摄像头索引改为视频文件的路径即可。

import cv2

# 打开视频文件,传入文件路径
cap = cv2.VideoCapture("a.avi")

# 播放视频
while cap.isOpened():
    flag, frame = cap.read()
    if not flag:
        break

    cv2.imshow("read_video", frame)
    key = cv2.waitKey(1000 // 30)
    if key == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

录制并保存视频

想要保存视频或录制摄像头画面,就需要用到 VideoWriter 类。以下是其标准使用流程,你可以将其作为一个固定模板来记忆:

  1. 打开视频源:打开摄像头或视频文件。
  2. 指定编码格式:创建 VideoWriter_fourcc 对象,它定义了视频的压缩编码格式(如 ‘XVID’ 对应 .avi, ‘MP4V’ 对应 .mp4)。
  3. 创建写入器:实例化 VideoWriter 对象,指定输出文件名、编码器、帧率和视频尺寸。
  4. 循环读写:读取每一帧,并将其写入输出文件。
  5. 释放资源:操作完成后,释放所有相关对象。

这里是一个使用Python保存摄像头录制的示例代码:

import cv2

# 打开摄像头
cap = cv2.VideoCapture(0)

# 创建视频编码格式对象
# ‘XVID’:常用于 .avi 格式的视频文件。
# ‘MP4V’:常用于 .mp4 格式的视频文件。
fourcc = cv2.VideoWriter_fourcc(*'XVID')

# 创建VideoWriter对象
# 参数1: 保存的文件路径(后缀名必须与编码格式匹配,如.avi)
# 参数2: 视频编码格式对象
# 参数3: 帧率 (fps)
# 参数4: 视频画面的尺寸(必须与输入源的尺寸一致,可通过cap.get(3), cap.get(4)获取)
vw = cv2.VideoWriter('output.avi', fourcc, 30, (640, 480))

# 循环读取并写入数据
while cap.isOpened():
    flag, frame = cap.read()
    if not flag:
        break

    # 将当前帧写入到输出视频文件中
    vw.write(frame)

    # 可选:实时显示当前录制画面
    cv2.imshow('save_video', frame)

    # 控制播放/录制速度,帧率应与VideoWriter中设置的一致
    key = cv2.waitKey(1000 // 30)
    if key == ord('q'):
        break

# 释放所有资源
cap.release()
vw.release()
cv2.destroyAllWindows()

程序运行后,你会在项目目录下找到新生成的 output.avi 文件。

视频保存结果文件管理器截图

希望以上示例能帮助你快速上手 OpenCV 的视频和摄像头操作。如果你在实践过程中遇到其他问题,或者想深入探讨计算机视觉的更多应用,欢迎来到云栈社区交流分享。




上一篇:别再折腾Tkinter了,用PySimpleGUI快速给脚本加个图形界面
下一篇:Node.js应用动态配置进阶:从.env文件到实时功能开关与灰度发布
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-29 23:42 , Processed in 0.337480 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表