Python学习笔记第七十六天(OpenCV视频应用)

Python学习笔记第七十六天

OpenCV视频应用

从相机中读取视频

OpenCV提供了cv2.VideoCapture()函数,用于从相机中读取视频。这个函数接受一个参数,即摄像头设备的编号。默认情况下,参数0表示使用第一个摄像头。下面是一个简单的例子:

python 复制代码
import cv2

# 打开摄像头
cap = cv2.VideoCapture(0)  # 0表示使用第一个摄像头

while True:
    # 读取一帧图像
    ret, frame = cap.read()
    
    # 如果读取成功,ret为True,否则为False
    if not ret:
        break
    
    # 显示图像
    cv2.imshow('Video', frame)
    
    # 等待用户按下任意键后退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头资源并关闭所有窗口
cap.release()
cv2.destroyAllWindows()

在上面的例子中,我们使用cv2.VideoCapture()函数打开摄像头,并使用while循环不断读取摄像头的帧。如果读取成功,我们使用cv2.imshow()函数显示图像。如果用户按下任意键,我们使用cv2.waitKey()函数等待用户输入,并通过判断按键是否为'q'来退出循环。最后,我们使用cap.release()释放摄像头资源,并使用cv2.destroyAllWindows()关闭所有窗口。

从文件中播放视频

OpenCV提供了cv2.VideoCapture()函数,不仅可以从相机中读取视频,还可以从文件中播放视频。下面是一个简单的例子:

python 复制代码
import cv2

# 打开视频文件
cap = cv2.VideoCapture('video.mp4')  # 指定要播放的视频文件路径

while True:
    # 读取一帧图像
    ret, frame = cap.read()
    
    # 如果读取成功,ret为True,否则为False
    if not ret:
        break
    
    # 显示图像
    cv2.imshow('Video', frame)
    
    # 等待用户按下任意键后退出循环(按下q键)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

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

在上面的例子中,我们使用cv2.VideoCapture()函数打开指定的视频文件,并使用while循环不断读取视频的帧。如果读取成功,我们使用cv2.imshow()函数显示图像。如果用户按下任意键,我们使用cv2.waitKey()函数等待用户输入,并通过判断按键是否为'q'来退出循环。最后,我们使用cap.release()释放资源,并使用cv2.destroyAllWindows()关闭窗口。

保存视频

OpenCV提供了cv2.VideoWriter()函数,用于将一系列帧保存为视频文件。这个函数接受三个参数:输出文件名、编码器类型和帧率。下面是一个简单的例子:

python 复制代码
import cv2
import numpy as np

# 创建一个窗口以显示要保存的帧(例如,从摄像头中捕获的帧)
cv2.namedWindow('frame')  # 创建一个名为'frame'的窗口以显示要保存的帧(例如,从摄像头中捕获的帧)
cap = cv2.VideoCapture(0)  # 从摄像头中捕获帧(0表示使用第一个摄像头)
fps = int(cap.get(cv2.CAP_PROP_FPS))  # 获取摄像头的帧率(每秒帧数)并将其转换为整数类型(例如,30fps为30)
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 指定编码器类型(例如,XVID编码器)并将其转换为四个字符代码(例如,'XVID')以供写入视频文件时使用)
out = cv2.VideoWriter('output_video.avi', fourcc, fps, (640, 480))  # 创建一个VideoWriter对象以将帧写入名为'output_video.avi'的视频文件(640x4880的分辨率,使用XVID编码器,帧率为30fps)

while cap.isOpened():  # 循环读取帧,直到摄像头关闭
    ret, frame = cap.read()  # 读取一帧图像
    if not ret:  # 如果读取失败(例如,摄像头已关闭)
        break  # 退出循环
    cv2.imshow('frame', frame)  # 显示帧
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 如果用户按下q键
        break  # 退出循环
    out.write(frame)  # 将帧写入视频文件

cap.release()  # 释放摄像头资源
out.release()  # 释放VideoWriter对象资源
cv2.destroyAllWindows()  # 关闭所有窗口

在上面的例子中,我们首先使用cv2.VideoCapture()函数打开摄像头,并使用while循环不断读取摄像头的帧。然后,我们使用cv2.VideoWriter()函数创建一个VideoWriter对象,指定要写入的视频文件名、编码器类型和帧率。接下来,我们使用while循环不断读取帧,并将帧写入视频文件。如果用户按下q键,我们使用cv2.waitKey()函数等待用户输入,并通过判断按键是否为'q'来退出循环。最后,我们释放摄像头资源和VideoWriter对象资源,并使用cv2.destroyAllWindows()关闭所有窗口。

后记

今天学习的是Python OpenCV视频应用学会了吗。 今天学习内容总结一下:

  1. 从相机中读取视频
  2. 从文件中播放视频
  3. 保存视频
相关推荐
海绵宝宝转agent4 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭4 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
每天都要写算法(努力版)5 小时前
【行业前沿报告】DAgger:让智能体在自己走到的状态上学习
人工智能·学习·机器学习
小小龙学IT5 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
2601_962071575 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境6 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路6 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师6 小时前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师6 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
Zootopia6267 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信