OpenCV 摄像头与视频入门(深扒版)

【OpenCV】OpenCV(视频加载与摄像头使用) 在计算机视觉的众多应用中,处理动态的视频数据流(无论是来自预先录制的视频文件还是实时摄像头)是最基本也是最核心的需求之一。OpenCV 为此提供了强大而灵活的工具,主要围绕 类展开。本章将对这一核心组件进行庖丁解牛式的讲解。在深入代码之前,理解视频数据的本质以及OpenCV在其中扮演的角色至关重要。视频并不仅仅是“活动的图片”。它是一个复杂的数据结构,通常包含以下几个关键组成部分:帧 (Frames):分辨率 (Resolution):色彩空间 (Color Space):编码格式 (Codec - Co 阅读详情

0 · 导读:一个心智模型贯穿全局

把三件事先统一起来:

  • 摄像头:一个永不停止、按固定帧率往外吐帧的设备。
  • 视频文件:一个预先录好、按固定帧率往外吐帧的文件。
  • OpenCV 的处理方式:两者都被抽象成 cv2.VideoCapture,区别只在于你传入的是「设备索引 0」还是「文件路径 "clip.mp4"」。

于是整条流水线只有一句话:

打开一个 VideoCapture → 循环 read() 拿到一帧 frame(numpy 数组) → 处理这一帧 → 显示/保存 → 循环,直到没有下一帧

全文两条贯穿主线(和图像处理一样,80% 的坑都在这里):

  1. frame 就是一张 uint8 的 NumPy 数组((H, W, 3) 的 BGR),你之前学的所有图像处理函数(cvtColor / resize / rectangle / split)对摄像头帧完全适用。
  2. 坐标 (x, y) 与数组 [y, x] 错位、BGR vs RGB —— 摄像头帧一样踩。

1 · 环境准备

1.1 安装

OpenCV 的 Python 包分两个:

包名 用途 体积
opencv-python 主模块 cv2,含核心 + 视频 IO + 图像算法 小
opencv-contrib-python 在上面的基础上加了 contrib 扩展(SIFT、跟踪、AR 等) 稍大

入门只用主模块即可:

pip install opencv-python

服务器 / 无显示环境(Docker、CI、树莓派无桌面)装 opencv-python-headless,否则 import cv2 会因找不到 GUI 后端报错。headless 版只是去掉了 imshow / namedWindow 这类依赖显示后端的函数,视频 VideoCapture / VideoWriter 不受影响。

1.2 验证安装

import cv2
print(cv2.__version__)          # 例如 4.9.0
cap = cv2.VideoCapture(0)       # 尝试打开默认摄像头
print(cap.isOpened())           # True 表示成功
cap.release()

1.3 版本与后端

cv2.getBuildInformation() 能看出当前编译进了哪些视频后端(V4L2 / DSHOW / GSTREAMER / FFMPEG)。后面排错经常要看它。

info = cv2.getBuildInformation()
print("FFMPEG" in info, "GSTREAMER" in info, "V4L2" in info)

2 · 图像基础回顾(因为摄像头帧就是图)

在进入视频前,先把「单张图」的几个 API 钉死,摄像头每帧用的就是它们。

import cv2

img = cv2.imread("cat.jpg")                 # 返回 BGR 的 (H,W,3) uint8 数组
cv2.imshow("window", img)                   # 在名为 window 的窗口显示
key = cv2.waitKey(0)                        # 等待按键;0=无限等待,>0=毫秒
cv2.destroyAllWindows()                     # 关闭所有窗口

三个必须记住的点:

  1. cv2.imread 返回 BGR(蓝绿红),不是 RGB。想用 matplotlib 显示要 cv2.cvtColor(img, cv2.COLOR_BGR2RGB)。
  2. cv2.imshow 之后必须跟一个 cv2.waitKey,否则窗口会瞬间闪退(它负责把图像推到屏幕并刷新事件队列)。
  3. cv2.waitKey(1) 在视频循环里的「1」是等待 1 毫秒并顺带处理 GUI 事件;不是「每秒 1 帧」。真正控制帧率的是摄像头自己的帧率。

3 · 摄像头捕获:VideoCapture

3.1 打开与读取

import cv2

cap = cv2.VideoCapture(0)        # 0 = 默认摄像头(笔记本内置摄像头)
if not cap.isOpened():
    raise IOError("打不开摄像头,检查设备索引/权限/是否被占用")

while True:
    ret, frame = cap.read()      # ret: 是否成功取到帧;frame: (H,W,3) BGR 数组
    if not ret:
        break
    cv2.imshow("live", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):   
opencv摄像头捕获视频 阅读详情

相关推荐

OpenCV 获取摄像头并显示摄像头视频

OpenCV 获取摄像头并显示摄像头视频

qq_43667702的博客 956

OpenCV中用于摄像头视频读取的函数说明

OpenCV中用于摄像头视频读取的函数说明。这里主要说明了这样几个函数的使用:1、cvQueryFrame;2、cvCaptureFromCAM;3.cvCreateCameraCapture;4、CvCapture;

hao8228的专栏 3291

13.opencv 打开摄像头与视频与录制

# 打开摄像头 import cv2 cv2.namedWindow('video', cv2.WINDOW_NORMAL) cv2.resizeWindow('video', 640, 480) cap = cv2.VideoCapture(0) # 循环读取摄像头每一帧 while True: # 读一帧数据,返回标记和这一帧数据。 ret, frame = cap.read() # 判断 if not ret: # 没读到 .

wzfafabga的博客 3261

别再为GEE注册发愁了!用谷歌Cloud Project,5分钟搞定谷歌地球引擎账户(保姆级图文)

本文提供2024最新版谷歌地球引擎(GEE)账户注册的保姆级教程,通过谷歌Cloud Project快速完成注册,5分钟极速通关。详细解析注册前的准备、分步图解流程、常见误区及解决方案,帮助用户避开90%的注册陷阱,直达GEE核心功能区。

weixin_42557830的博客 199

从零搭建A股量化交易系统:开源框架选型与实战部署指南

本文详细介绍了从零搭建A股量化交易系统的完整流程,重点分析了开源框架VNPY和QMT的选型与实战部署。内容涵盖系统架构设计、策略开发、性能优化及实盘过渡方案,为开发者提供了一套完整的A股实盘量化交易解决方案,助力高效构建稳定可靠的量化交易系统。

sugar的博客 1268

Silvaco Atlas(五)——物理模型总结

物理模型总结

qsz1425AWD2121的博客 2149

渗透测试实战—云渗透(AK/SK泄露)

渗透测试实战思路分享:getshell方法及横向移动方法,云安全(AK/SK泄露)

网安日记本的博客 4045

Proteus-51单片机-LCD1602显示DS1302时钟

本文详细介绍了如何使用Proteus仿真51单片机配合LCD1602显示DS1302时钟的步骤,包括DS1302时钟芯片的主要特性、引脚定义、外围电路以及LCD1602的原理和技术参数。此外,还讲解了LCD1602的指令集和显示字符的方法,并给出了初始化及显示操作的步骤。

让你爱上电路设计 6977

基于VSCode+clangd插件打造高效C++开发环境之四:clangd配置

本文介绍如何配置VSCode+clangd插件进行高效C++开发。重点内容包括:1)生成compile_commands.json文件,通过ninja工具提取编译命令并使用gen_compdb脚本转换;2)配置clangd命令行参数,如设置后台索引、并行度等;3)编写.clangd配置文件,调整编译标志和诊断选项;4)添加.clang-format文件定义代码风格;5)在VSCode中添加远程服务器工作目录。配置完成后需重启clangd服务使更改生效。文章还提供了MTK/QCOM等不同平台生成compile

5061

【BUG已解决】ImportError: cannot import name ‘OpenAI‘ from ‘openai‘ 解决方案

的核心是版本不匹配用确认当前版本如果是 0.x 版本 →升级到 1.x升级后代码语法要同步改为团队协作项目务必在中锁定版本号,避免"我这能跑,你那不能跑"的问题对接国产模型时,只需替换base_url参数,SDK 调用方式完全一致。

一键难忘的博客 1万+

Python爬虫教程:抓取纽约时报文章存档

爬虫技术主要用于从网站上抓取并提取数据。HTTP请求:使用requests库发送HTTP请求以获取网页。网页解析:使用或lxml库解析HTML网页。数据存储:将抓取的数据保存为CSV、JSON等格式,或者存储在数据库中。防反爬虫技术:模拟正常的用户请求,避免被反爬虫机制封锁。多线程与异步爬取:提高抓取效率。通过这篇博客,您已经学习了如何使用Python爬取纽约时报的历史文章存档。本文介绍了如何模拟请求头、抓取网页内容、解析HTML并提取数据,最后存储到CSV文件或数据库中。

2201_76125261的博客 592

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 轮廓与形态学:边缘检测 / 轮廓查找 / 形态学开闭运算
下一篇: OpenCV 人脸打卡 / 人数统计小工具:原理与关键代码
reset2021
博客等级 码龄5年 561粉丝 415原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

reset2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值