opencv(python)视频按帧切片/cv2.VideoCapture()用法

一、介绍

cv2.VideoCapture是OpenCV中一个用于捕捉视频的类。它可以访问计算机的摄像头,或从视频文件中读取图像。通过cv2.VideoCapture,用户可以轻松地捕捉、保存、编辑和传输视频流数据。

使用cv2.VideoCapture可以实现以下功能:

  1. 打开计算机的摄像头,实时捕捉摄像头的视频流数据。

  2. 读取视频文件,逐帧解码并输出视频流数据。

  3. 控制帧率,调整视频的播放速度。

  4. 控制视频的长宽和分辨率。

  5. 编辑视频流数据,比如添加水印、合并视频等操作。

  6. 传输视频数据,可以通过网络传输视频流数据。

cv2.VideoCapture中最常用的方法有:

  1. read():读取视频流数据中的一帧。

  2. isOpened():检查当前的cv2.VideoCapture是否已经打开。

  3. release():释放cv2.VideoCapture对象占用的资源。

例如以下代码展示如何使用cv2.VideoCapture对象打开计算机的摄像头并捕获实时视频:

复制代码
import cv2

cap = cv2.VideoCapture(0)  # 打开计算机的摄像头

while True:
    ret, frame = cap.read()  # 读取视频流数据中的一帧

    cv2.imshow('frame', frame)  # 显示捕获的视频流数据

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()  # 释放占用的资源
cv2.destroyAllWindows()

二、cv2.VideoCapture()视频的获取操作

1、从文件读取视频

参数是视频文件路径,打开方式如下:

复制代码
videoCapture = cv2.VideoCapture("../test1.mp4") #.avi等视频文件

2、从摄像头读取视频

VideoCapture(0)中参数是0,表示打开笔记本的内置摄像头,如果有多个摄像头,往上加就可。

复制代码
videoCapture = cv2.VideoCapture(0)
复制代码
如果要读取监控摄像头的视频流,需要知道指定摄像头的ip等信息。
复制代码
# 使用rtsp流打开相机
videoCapture = cv2.VideoCapture(f'rtsp://{username}:{password}@{ip}:{port}/h264/ch1/main/av_stream')

三、videoCapture.read()按帧读内容

复制代码
# 读帧
success, frame = videoCapture.read()
print(success)
print(frame)
复制代码
success,frame是获.read()方法的两个返回值。 其中success是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

下面这个示例中,我们使用了默认摄像头(设备编号为0)作为输入,然后使用while循环逐帧读取视频并在窗口中显示。如果按下 'q' 键或无法读取视频,则退出循环并释放资源。

复制代码
import cv2

# 创建 VideoCapture 对象
cap = cv2.VideoCapture(0)

# 循环读取视频流
while True:
    # 逐帧读取视频
    ret, frame = cap.read()

    # 如果不能读取视频,退出循环
    if not ret:
        break

    # 在窗口中显示视频帧
    cv2.imshow("frame", frame)

    # 检测键盘输入,按 'q' 键退出循环
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()

什么是帧,帧的快慢是什么,影响什么

视频的基本组成部分是帧(frame),即一系列静态图像,这些图像在一定速率下以连续的方式播放,形成动态图像,例如30帧/秒。视频每秒的帧数被称为帧率(Frame Rate),通常用"fps"(Frames Per Second)表示。例如,30fps表示视频每秒钟包含30帧图像。帧率决定了视频的流畅度和真实感。较高的帧率可以使视频看起来更加流畅,因为它们可以更快地刷新图像。例如,60fps的视频比30fps的视频看起来更加流畅。此外,较高的帧率还可以减少视频中的模糊和颤动,因为它们可以更好地捕捉运动。但较高的帧率会导致文件变大和编解码更复杂,因为需要处理更多的帧图像。


https://blog.csdn.net/cvxiayixiao/article/details/130519349

相关推荐
一晌小贪欢22 分钟前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
躺平大鹅31 分钟前
5个实用Python小脚本,新手也能轻松实现(附完整代码)
python
yukai0800837 分钟前
【最后203篇系列】039 JWT使用
python
独好紫罗兰1 小时前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
Dfreedom.1 小时前
图像直方图完全解析:从原理到实战应用
图像处理·python·opencv·直方图·直方图均衡化
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
怒放吧德德2 小时前
Python3基础:基础实战巩固,从“会用”到“活用”
后端·python
aiguangyuan2 小时前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
喵手2 小时前
Python爬虫实战:知识挖掘机 - 知乎问答与专栏文章的深度分页采集系统(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集知乎问答与专栏文章·采集知乎数据·采集知乎数据存储sqlite
铉铉这波能秀2 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple