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

OPENCV摄像头读取视频

OpenCV 读取摄像头的代码示例

以下是几种使用 OpenCV 读取摄像头的常见方法:

1. 基础摄像头读取

import cv2# 打开默认摄像头(通常是0)
cap = cv2.VideoCapture(0)# 检查摄像头是否成功打开
if not cap.isOpened():print("无法打开摄像头")exit()print("摄像头已打开,按 'q' 键退出")while True:# 读取一帧ret, frame = cap.read()# 检查帧是否读取成功if not ret:print("无法读取帧")break# 显示帧cv2.imshow('摄像头', frame)# 按'q'键退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源
cap.release()
cv2.destroyAllWindows()

2. 设置摄像头参数

import cv2cap = cv2.VideoCapture(0)# 设置摄像头参数
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)   # 宽度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)  # 高度
cap.set(cv2.CAP_PROP_FPS, 30)            # 帧率# 获取实际参数值
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)print(f"摄像头分辨率: {width}x{height}, 帧率: {fps}")while True:ret, frame = cap.read()if not ret:break# 在画面上显示信息cv2.putText(frame, f"分辨率: {int(width)}x{int(height)}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)cv2.putText(frame, f"帧率: {fps}", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)cv2.imshow('摄像头', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

3. 多摄像头读取

import cv2# 尝试打开多个摄像头
caps = []
for i in range(3):  # 尝试打开0,1,2号摄像头cap = cv2.VideoCapture(i)if cap.isOpened():caps.append(cap)print(f"摄像头 {i} 已连接")else:print(f"摄像头 {i} 未连接")if not caps:print("没有可用的摄像头")exit()print(f"共找到 {len(caps)} 个摄像头")while True:frames = []for i, cap in enumerate(caps):ret, frame = cap.read()if ret:# 在每帧上标记摄像头编号cv2.putText(frame, f"Camera {i}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)frames.append(frame)if not frames:break# 合并显示多个摄像头画面if len(frames) == 1:combined = frames[0]elif len(frames) == 2:combined = cv2.hconcat(frames)else:# 对于3个或更多摄像头,可以调整布局top = cv2.hconcat(frames[:2])bottom = cv2.hconcat(frames[2:]) if len(frames) > 2 else frames[2]combined = cv2.vconcat([top, bottom]) if len(frames) > 2 else topcv2.imshow('多摄像头', combined)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放所有摄像头
for cap in caps:cap.release()
cv2.destroyAllWindows()

4. 保存视频流

import cv2cap = cv2.VideoCapture(0)# 设置视频编码器和输出文件
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))recording = False
print("按 'r' 开始/停止录制,按 'q' 退出")while True:ret, frame = cap.read()if not ret:break# 如果正在录制,保存帧if recording:out.write(frame)cv2.putText(frame, "录制中...", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)cv2.imshow('摄像头', frame)key = cv2.waitKey(1) & 0xFFif key == ord('q'):breakelif key == ord('r'):recording = not recordingprint("录制" if recording else "停止录制")cap.release()
out.release()  # 释放视频写入器
cv2.destroyAllWindows()

5. 带简单图像处理的摄像头读取

import cv2
import numpy as npcap = cv2.VideoCapture(0)mode = 0  # 0: 原图, 1: 灰度, 2: 边缘检测, 3: 模糊
modes = ['原图', '灰度', '边缘检测', '模糊']print("按 'm' 切换模式,按 'q' 退出")while True:ret, frame = cap.read()if not ret:break# 根据模式处理图像if mode == 1:processed = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)processed = cv2.cvtColor(processed, cv2.COLOR_GRAY2BGR)  # 转回BGR用于显示elif mode == 2:gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)processed = cv2.Canny(gray, 100, 200)processed = cv2.cvtColor(processed, cv2.COLOR_GRAY2BGR)elif mode == 3:processed = cv2.GaussianBlur(frame, (15, 15), 0)else:processed = frame.copy()# 显示当前模式cv2.putText(processed, f"模式: {modes[mode]}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)cv2.imshow('摄像头', processed)key = cv2.waitKey(1) & 0xFFif key == ord('q'):breakelif key == ord('m'):mode = (mode + 1) % len(modes)print(f"切换到模式: {modes[mode]}")cap.release()
cv2.destroyAllWindows()

部分api解释:

ret, frame = cap.read()

  • 第一个返回值 (ret):布尔值(True/False),表示帧是否成功读取

  • 第二个返回值 (frame):如果读取成功,这是一个包含图像数据的 NumPy 数组

# 显示一帧图像cv2.imshow('frame', frame)# 如果按下'q'键,退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break

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

相关文章:

  • AIGC——提示词的设计
  • 网站节约化建设swf上传wordpress
  • 如何创建个人网站深圳品牌女装加盟
  • Docker部署的MySQL,如何一键备份Docker中的MySQL?
  • 《基于物理仿真和学习潜投影的机器人触觉感知模拟到真实》ICRA2021论文解读
  • IU5365E:一体化铅酸电池充电管理解决方案
  • 厦门安岭路网站建设oa系统的概念
  • 【C++】如何搞定 C++ 内存管理?
  • 关于做情侣的网站的图片素材网络营销效果评估的作用有哪些
  • 网站制作洋网络泰安最新消息
  • 中科君达视界千眼狼科学仪器赋能“芯屏汽合”制造
  • 案例分享:增材制造的负泊松比材料拉胀测试-VIC-3D高空间分辨率DIC系统在增材制造复杂结构中的应用
  • 安卓接入Max广告源
  • Rockchip平台 Android 11 到 Android 16 系统占用内存对比分析
  • 简洁文章类织梦网站模板郑州企业服务公司
  • 企业网站的需求是什么WordPress網站放ICP
  • Avalonia:创建安卓、Web应用(部署到iis)
  • three.js —— 引入模型
  • 一次跨端数据类型兼容问题的排查与解决(判断类型)
  • Fscan:内网综合扫描工具深度入门指南
  • 什么时候能用ipv6做网站二手房网
  • 免费网站管理系统下载mvc5网站开发实战详解
  • 零基础从头教学Linux(Day 42)
  • 前端拿到标准省市区数据
  • (六)重构的艺术:简化复杂条件逻辑的秘诀
  • 雏光 网络推广 网站建设ps模板素材网站
  • 高可用MySQL的整体解决方案、体系化原理和指导思路
  • yoda_formatting_func函数解析(105)
  • Vue 3 中 routes 与 route 的详解
  • 哪有做网站推广wordpress 在线编辑器