当前位置: 首页 > news >正文

Python 中使用 OpenCV 库来捕获摄像头视频流并在窗口中显示

文章目录

  • 一、实例代码
  • 二、相关设置
  • 小结

一、实例代码

  1. 连接 USB 相机之后,通过指令ls /dev/video*查看设备号,通过一个简单的脚本使用 OpenCV 库来捕获摄像头视频流并在窗口中显示,ESC键退出。

    import cv2# 摄像头设备号
    cap = cv2.VideoCapture(0)
    window_name = "usb camera"# 启用 MJPEG 压缩
    cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))# 尝试设置为 60 FPS(是否成功取决于摄像头)
    cap.set(cv2.CAP_PROP_FPS, 60)# 尝试设置摄像头分辨率
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)# 获取实际设置的分辨率
    actual_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    actual_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    print(f"实际分辨率: {actual_width}x{actual_height}")# 打印实际帧率(FPS)
    fps = cap.get(cv2.CAP_PROP_FPS)
    print(f"摄像头帧率: {fps} FPS")cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
    cv2.resizeWindow(window_name, actual_width, actual_height)  # 窗口匹配分辨率while True:ret, frame = cap.read()if not ret:print("读取失败")breakcv2.imshow(window_name, frame)if cv2.waitKey(1) == 27:  # ESC键退出breakcap.release()
    cv2.destroyAllWindows()
    

二、相关设置

  1. cap.set(参数属性, 期望值),用于向摄像头硬件发送配置请求,尝试将某个参数(如编码格式、帧率、分辨率)设置为指定值。

  2. 编码格式cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G')) 是一个 常见且推荐的操作,尤其在需要高分辨率、高帧率USB带宽受限的场景。MJPEG(Motion-JPEG)压缩能显著减少数据量,使摄像头在有限带宽下支持更高的分辨率(如1080p/4K)和帧率(如60FPS/120FPS),同时降低CPU解码负担。相比原始格式(如YUYV),MJPEG 在实时视频捕获中更高效,兼容性广,是OpenCV、工业相机及嵌入式设备的常用选择。若摄像头支持,建议优先启用 MJPEG 以优化性能,若不支持,可回退到默认格式。

  3. 帧率cap.set(cv2.CAP_PROP_FPS, 60)OpenCV 中控制帧率的属性参数,用于设置摄像头的目标采集帧率(如60FPS),60是一个请求值,实际帧率取决于摄像头的硬件能力和当前配置的分辨率/编码格式等,可能最高仅支持30FPS,即使设置为60FPS也会自动降级。

  4. 分辨率cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) 用于设置摄像头采集画面的目标宽度(水平分辨率),1920同样是一个请求值,实际分辨率可能被摄像头自动调整为最接近的支持值。

  5. 其他参数设置可供参考并以设备实际响应为准。

    参数类别OpenCV 属性名典型值/选项作用说明适用场景
    自动曝光CAP_PROP_AUTO_EXPOSURE1(自动), 0(手动)控制摄像头是否自动调整曝光量光照变化频繁的环境(如户外)
    手动曝光CAP_PROP_EXPOSURE范围依赖硬件,典型范围为 -130手动设置曝光值(正值增亮,负值减暗)需要固定曝光(如工业检测)
    自动白平衡CAP_PROP_AUTO_WB1(自动), 0(手动)启用/禁用自动白平衡色彩准确性要求高的场景
    手动白平衡CAP_PROP_WB_TEMPERATURE色温值(如 5000K)手动设置白平衡色温特殊光照条件(如霓虹灯环境)
    缓冲区大小CAP_PROP_BUFFERSIZE1(最小延迟)减少摄像头内部缓冲帧数,降低延迟实时控制(如无人机、机器人视觉)
    自动对焦CAP_PROP_AUTOFOCUS1(启用), 0(禁用)控制摄像头是否自动对焦动态距离变化的场景(如人脸跟踪)
    手动对焦CAP_PROP_FOCUS0(最近)-100(最远)手动调整对焦距离固定焦距需求(如显微镜拍摄)
    API后端选择cv2.VideoCapture() 的第二个参数cv2.CAP_V4L2(Linux常用)指定视频采集后端,解决兼容性问题跨平台或特定系统(如Linux用V4L2)
    亮度调整CAP_PROP_BRIGHTNESS0-100调整画面整体亮度低光环境补偿
    对比度调整CAP_PROP_CONTRAST0-100调整画面对比度增强细节可见性
    饱和度调整CAP_PROP_SATURATION0-100调整色彩饱和度色彩增强或黑白模式
    增益控制CAP_PROP_GAIN0-100调整信号放大倍数(可能增加噪点)极低光照环境

小结

上述内容仅用作个人参考,如有问题欢迎在评论区指正,谢谢!!

http://www.dtcms.com/a/305480.html

相关文章:

  • RAG实战指南 Day 28:RAG系统缓存与性能优化
  • Web3:赛道划分与发展趋势解析
  • JDBC编程笔记
  • 创建型设计模式-Builder
  • Git链接备用手册
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博内容IP地图可视化分析实现
  • 《设计模式之禅》笔记摘录 - 11.策略模式
  • 15 - 多模态大语言模型 — 图文 “牵线” 系统 “成长记”:借 CLIP 练本领,从图像与文字里精准 “搭鹊桥” 的全过程 (呆瓜版 - 2 号)
  • Java源码构建智能名片小程序
  • 短剧小程序系统开发:重塑影视内容消费格局
  • 北京理工大学医工交叉教学实践分享(1)|如何以实践破解数据挖掘教学痛点
  • 招工招聘小程序系统开发——打造一站式招聘服务平台
  • DISTILLM:迈向大型语言模型的简化蒸馏方法
  • 基于动态权重-二维云模型的川藏铁路桥梁施工风险评估MATLAB代码
  • [硬件电路-106]:模拟电路 - 电路为什么会出现不同的频率特性?元件频率依赖性、信号传输路径、电路拓扑结构、外部因素
  • 新手向:DeepSeek 部署中的常见问题及解决方案
  • C语言:函数指针、二级指针、常量指针常量、野指针
  • 域名https证书
  • 【动态规划算法】斐波那契数列模型
  • 深入理解PostgreSQL的MVCC机制
  • webpack-性能优化
  • 告别内存泄漏:你的Rust语言30天征服计划
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | 3dBackgroundBoxes(3D背景盒子组件)
  • Prometheus-2--什么是Exporter是什么?
  • STM32F1 Flash的操作
  • 【学习过程记录】【czsc】1、安装
  • 【Qt开发】信号与槽(三)-> 自定义信号和槽
  • QT---》文件MD5码的获取与验证
  • 关于vue __VUE_HMR_RUNTIME__ is not defined报错处理
  • Baumer工业相机堡盟工业相机如何通过YoloV8的深度学习模型实现汽车牌照的位置识别(C#代码,UI界面版)