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

OpenCV中VideoCapture的各种用法

cv2.VideoCapture() 是 OpenCV 用于捕获视频流的类,通常用于从摄像头、视频文件或视频流中读取帧。除了 cv2.VideoCapture(0) 用于从默认摄像头捕获视频流,cv2.VideoCapture() 还有很多其他用途和方法。以下是一些常用的用法:

1. 捕获视频文件

你可以用来读取本地视频文件,而不仅仅是摄像头。

cap = cv2.VideoCapture('video.mp4')

2. 读取网络摄像头(多个摄像头)

使用不同的数字参数来选择不同的摄像头,例如 0 是默认的第一个摄像头,1 是第二个摄像头。

cap = cv2.VideoCapture(1)  # 使用第二个摄像头

3. 捕获网络视频流

如果你有网络摄像头或视频流的 URL,你可以直接使用该 URL 进行视频捕获。

cap = cv2.VideoCapture('http://192.168.1.100:8080/video')

4. 设置属性(如分辨率、帧率等)

使用 set() 方法来设置摄像头或视频捕获的各种属性,例如分辨率、帧率等。

cap = cv2.VideoCapture(0)

# 设置视频分辨率为 1280x720
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

# 设置帧率为 30 FPS
cap.set(cv2.CAP_PROP_FPS, 30)

5. 获取属性

使用 get() 方法可以获取当前视频捕获的各种属性,比如宽度、高度、帧率等。

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: {width}, Height: {height}, FPS: {fps}")

6. 检查视频是否打开成功

使用 isOpened() 方法检查是否成功打开视频源。

if not cap.isOpened():
    print("无法打开摄像头")

7. 逐帧读取视频

使用 read() 方法逐帧读取视频。

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    # 显示帧
    cv2.imshow("Frame", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

8. 释放视频捕获对象

用完视频捕获对象后,应该调用 release() 来释放资源。

cap.release()
cv2.destroyAllWindows()

9. 使用编码器保存视频

如果需要保存捕获的视频,可以结合 cv2.VideoWriter 来实现。

# 使用 XVID 编码器
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    out.write(frame)  # 将帧写入文件
out.release()

cv2.VideoCapture() 非常灵活,既可以用于实时摄像头输入,也可以读取各种视频文件和网络视频流。


http://www.kler.cn/a/463342.html

相关文章:

  • 【开源项目】数字孪生立交~东湖高新区互通式立交数字孪生可视化项目——开源工程及源码
  • DDoS攻击防御方案大全
  • mask-R-cnn模型详解
  • Git的使用流程(详细教程)
  • MySQL初始安装登录:ERROR 2003 (HY000): Can‘t connect to MySQL server on
  • Qt监控系统放大招/历经十几年迭代完善/多屏幕辅屏预览/多层级设备树/网络登录和回放
  • 慎用翼讯科技服务器以及不知名服务器的说明
  • 手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电
  • Vue2: 创建一个可多选的Table,并回显数据选中状态
  • 华为配置 之 链路聚合
  • -qemu
  • PCIe通信---RIFFA
  • 鸿蒙 NEXT 开发中,使用公共事件进行进程间通信
  • 《机器学习》线性回归模型实现
  • torch.nn.LSTM介绍
  • 基于微信小程序的校园自助打印系统
  • 基于单片机的多功能遥控加湿器的设计
  • 最大化堡垒补给数量的策略与实现
  • 【计算机视觉】超简单!维纳滤波的经典案例
  • SpringCloud源码分析-Ribbon与LoadBalancer
  • jmeter分布式启动
  • Java全栈项目-校园兼职信息平台
  • C++ Lambda 表达式: 简洁与高效的完美结合
  • 【 解决国内Github.com打不开的方法】
  • Tailwind CSS 实战:电商产品展示页面开发
  • leetcode 1345. 跳跃游戏 IV