跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python OpenCV 基础:摄像头调用与视频处理实战

Python OpenCV 库提供了强大的计算机视觉功能。涵盖利用 VideoCapture 对象调用摄像头、读取本地视频流以及通过 VideoWriter 进行视频录制的核心方法。重点解析了帧率控制、编码格式选择及属性设置等关键参数,帮助开发者快速实现基础的图像采集与处理流程。

链路追踪发布于 2025/1/19更新于 2026/10/15108 浏览
Python OpenCV 基础:摄像头调用与视频处理实战

OpenCV 是计算机视觉领域最流行的库之一。假设你已经完成了环境安装,下面直接切入核心功能,聊聊如何用 Python 调用摄像头、播放本地视频以及录制视频。

1. 利用 OpenCV 打开摄像头

要启动摄像头,核心是创建 VideoCapture 对象。参数 0 代表默认摄像头编号,如果电脑连接了多个设备,可以尝试传入 1 或更高数字来切换。

import cv2

capture = cv2.VideoCapture(0)

while True:
    # read() 返回两个值:ret 和 frame
    # ret 是布尔值,表示帧是否成功获取
    ret, frame = capture.read()
    
    if not ret:
        break
        
    # 显示图像窗口,第一个参数是窗口标题
    cv2.imshow('frame', frame)
    
    # 等待按键,1ms 后刷新,按 'q' 退出
    if cv2.waitKey(1) == ord('q'):
        break

capture.release()
cv2.destroyAllWindows()

关于灰度图: 如果想看黑白画面,只需在显示前加一步颜色转换。cv2.cvtColor() 负责将 BGR 转为 Gray(灰度)。

# ... 上面代码保持不变 ...
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', gray) # 这里显示灰度图
# ... 后续逻辑不变 ...

属性控制: 除了读取,还能通过 get() 和 set() 调整摄像头参数,比如分辨率、亮度等。propId 对应不同的属性 ID(0~18),具体数值可查阅官方文档。

capture = cv2.VideoCapture(0)
# 获取当前宽度和高度
width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(f"当前分辨率:{width}x{height}")

# 尝试设置分辨率(注意:并非所有摄像头都支持自定义分辨率)
# capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2)
# capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height * 2)

2. 播放本地视频

播放本地文件与调用摄像头的 API 几乎一致,区别在于初始化时传入的是文件路径而非数字索引。

import cv2

video_path = "./test_video.mp4"
capture = cv2.VideoCapture(video_path)

while capture.isOpened():
    ret, frame = capture.read()
    if not ret:
        break
        
    cv2.imshow("Video", frame)
    
    # waitKey 参数决定播放速度,单位毫秒
    # 30ms 约等于每秒 33 帧,可根据需求调整
    if cv2.waitKey(30) == ord('q'):
        break

capture.release()
cv2.destroyAllWindows()

3. 录制视频

保存视频需要用到 VideoWriter 对象。初始化时需要指定四个关键参数:输出文件名、编码格式、帧率(FPS)和分辨率。

FourCC 编码: 用于指定视频压缩方式。常见的如 MJPG,写法可以是 cv2.VideoWriter_fourcc(*'MJPG') 或逐个字符传入。

import cv2

capture = cv2.VideoCapture(0)

# 定义编码格式
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 创建写入对象:文件名,编码,帧率,尺寸
outfile = cv2.VideoWriter("output.avi", fourcc, 25.0, (640, 480))

while capture.isOpened():
    ret, frame = capture.read()
    if ret:
        outfile.write(frame)  # 写入每一帧
        cv2.imshow('Recording', frame)
        if cv2.waitKey(1) == ord('q'):
            break
    else:
        break

capture.release()
outfile.release()
cv2.destroyAllWindows()

总结

  • 采集与播放:统一使用 cv2.VideoCapture(),参数为数字即摄像头,为路径即本地视频。
  • 属性调节:通过 cap.get() 读取状态,cap.set() 修改配置。
  • 视频写入:使用 cv2.VideoWriter() 配合合适的 FourCC 编码实现录制。

掌握这些基础接口,就能快速搭建起图像采集与处理的流程框架。

目录

  1. 1. 利用 OpenCV 打开摄像头
  2. ... 上面代码保持不变 ...
  3. ... 后续逻辑不变 ...
  4. 获取当前宽度和高度
  5. 尝试设置分辨率(注意:并非所有摄像头都支持自定义分辨率)
  6. capture.set(cv2.CAPPROPFRAME_WIDTH, width * 2)
  7. capture.set(cv2.CAPPROPFRAME_HEIGHT, height * 2)
  8. 2. 播放本地视频
  9. 3. 录制视频
  10. 定义编码格式
  11. 创建写入对象:文件名,编码,帧率,尺寸
  12. 总结

更多推荐文章

查看全部
  • 基于 TextIn 与 Coze 的财报数据自动化抽取实践
  • Anaconda 与 Python 环境安装配置指南
  • GitHub 身份验证方式 PAT 和 SSH 详解
  • Spring AI 框架入门:从 DeepSeek 集成到 RAG 实战
  • Qwen3 结合 Qwen Agent 智能体开发实战:接入 MCP 工具
  • 1Panel 部署 Ollama 与 Open WebUI 搭建私有化 AI 模型平台
  • AIGC 个性化与定制化内容生成:技术原理与应用
  • 自然语言处理:高级应用、前沿模型与实战开发
  • Ollama 底层原理:llama.cpp 与 GGUF 格式解析
  • Python 正则表达式核心用法解析
  • Web-Check 结合 cpolar 实现异地远程访问与漏洞检测
  • 工业相机触发模式详解:原理、配置与调试指南
  • Transformers 库入门与实战指南
  • 二叉树前中后序遍历详解(递归与迭代实现)
  • Java 模拟算法实战:经典题型深度解析
  • 飞牛 NAS 原生 WebDAV 挂载 115 网盘配置指南
  • 前端微前端架构:大型项目应用与风险分析
  • AutoGPT+Python:构建自主 AI 智能体实战指南
  • Python 基于大数据的手机商品数据分析
  • 时序数据库选型指南:Apache IoTDB 核心优势与实践

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online