OpenCV项目实战(1)— 如何去截取视频中的帧

**前言:****Hello大家好,我是小哥谈。**针对一段视频,如何去截取视频中的帧呢?本节课就给大家介绍两种方式,一种方式是按一定间隔来截取视频帧,另一种方式是截取视频的所有帧。希望大家学习之后能够有所收获!🌈

目录

🚀1.按一定间隔截取视频帧

[💥💥1.1 核心技术](#💥💥1.1 核心技术)

[💥💥1.2 实现步骤](#💥💥1.2 实现步骤)

[💥💥1.3 实现代码](#💥💥1.3 实现代码)

🚀2.截取视频中所有的帧

[💥💥2.1 核心技术](#💥💥2.1 核心技术)

[💥💥2.2 实现步骤](#💥💥2.2 实现步骤)

[💥💥2.3 实现代码](#💥💥2.3 实现代码)

**实例1:**本实例将使用OpenCV从视频文件中按一定的视频帧数间隔截取视频帧,并将截取到的视频帧保存在项目images文件夹下。

🚀1.按一定间隔截取视频帧

💥💥1.1 核心技术

本实例将从视频文件中按每隔100帧截取视频帧,并将截取到的视频帧保存在images文件夹下。其中,在按每隔100帧截取视频帧之前,要先定义表示"记录读取到的帧数"和"每隔100帧"的两个标签。🌴

关键代码如下所示:

python 复制代码
frame_number = 1 # 记录读取到的帧数,初始值为1

frame_interval = 100 # 每隔100帧

具备了这两个标签后,再来编写"将截取到的视频帧保存在images文件夹下"的代码。需要注意的是,在拼接保存视频帧路径之前,要先把frame_number由整数转为字符串。

关键代码如下所示:

python 复制代码
if (frame_number % frame_interval == 0): # 每隔100帧

cv2.imwrite("images/" + str(frame_number) + ".jpg", frame) # 截取并保存1帧

💥💥1.2 实现步骤

本实例的操作对象是视频文件。首先,使用VideoCapture类的构造方法打开视频文件。然后,读取视频帧。接着,按每隔100帧截取视频帧,并将截取到的视频帧保存在images文件夹下。最后,释放被视频文件占用的空间。🌱

实现步骤流程图如下所示:

💥💥1.3 实现代码

具体的实现代码如下所示:

python 复制代码
import cv2

video = cv2.VideoCapture("1.mp4") # 打开视频文件
frame_number = 1 # 记录读取到的帧数,初始值为1
frame_interval = 100 # 每隔100帧(截取1帧)
while (video.isOpened()): # 视频文件被打开后
    retval, frame = video.read() # 读取视频帧
    if retval == True: # 读取到视频帧后
        if (frame_number % frame_interval == 0): # 每隔100帧
            cv2.imwrite("images/" + str(frame_number) + ".jpg", frame) # 截取并保存1帧
    else: # 没有读取到视频帧
        break # 终止循环
    frame_number = frame_number + 1 # 读取到的视频帧执行自加操作
    cv2.waitKey(1) # 1毫秒后播放视频文件的下一帧
print("视频帧已截取完成!") # 控制台输出提示信息
video.release() # 释放被视频文件占用的空间

运行结果如图所示:

由于我准备的视频文件很小,所以按照每100帧截取1帧,只截取到2帧。✅


**实例2:**视频是由大量的帧组成的。其中,每一帧都是一幅图像。所谓视频分解,就是把组成视频的每一帧从视频文件中分解出来。本实例将使用OpenCV分解一个视频文件,把分解得到的视频帧保存在项目目录images文件夹下。

🚀2.截取视频中所有的帧

💥💥2.1 核心技术

本实例要分解的是视频文件,从中得到每一个视频帧,并且将这些视频帧保存在images文件夹下。其中,在保存视频帧之前,要先命名将要被保存的视频帧。🌴

关键代码如下所示:

python 复制代码
frame_name = 1 # 使用数字命名将要被保存的帧

具备了这个标签后,再来编写"将这些视频帧保存在images文件夹下"的代码。需要注意的是,在拼接保存视频帧路径之前,要先把frame_name由整数转为字符串。

关键代码如下所示:

python 复制代码
cv2.imwrite("images/" + str(frame_name) + ".jpg", frame) # 保存视频帧

💥💥2.2 实现步骤

首先,使用VideoCapture类的构造方法打开视频文件。然后,读取视频帧。接着,把读取到的视频帧保存在images文件夹下。最后,释放被视频文件占用的空间。

实现步骤流程图如下所示:

💥💥2.3 实现代码

具体的实现代码如下所示:

python 复制代码
import cv2

video = cv2.VideoCapture("1.mp4") # 打开视频文件
frame_name = 1 # 使用数字命名将要被保存的帧
while (video.isOpened()): # 视频文件被打开后
    retval, frame = video.read() # 读取视频帧
    if retval == True: # 读取到视频帧后
        cv2.imwrite("images/" + str(frame_name) + ".jpg", frame) # 保存视频帧
    else: # 没有读取到视频帧
        break # 终止循环
    frame_name = frame_name + 1 # 用于命名将要被保存的帧的数字执行自加操作
    cv2.waitKey(1) # 1毫秒后播放视频文件的下一帧
print("视频已分解完成!") # 控制台输出提示信息
video.release() # 释放被视频文件占用的空间

运行结果如图所示:


相关推荐
Memene摸鱼日报几秒前
「Memene 摸鱼日报 2025.9.12」前OpenAI CTO 公司发布首篇技术博客,Qwen-Next 80B 发布,Kimi 开源轻量级中间件
人工智能·agi
无妄无望2 分钟前
目标计数论文阅读(1)Class-Agnostic Counting
论文阅读·计算机视觉
飞机火车巴雷特5 分钟前
【论文阅读】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022)
论文阅读·深度学习·不确定性建模
飞哥数智坊11 分钟前
CodeBuddy CLI 实测:比 Claude Code 稚嫩,但我感觉值得期待
人工智能·ai编程
电商软件开发 小银14 分钟前
本地生活服务平台创新模式观察:积分体系如何重塑消费生态?
大数据·人工智能·数字化转型·私域运营·消费者心理学
扬帆起航1321 分钟前
亚马逊新品推广破局指南:从手动试错到智能闭环的系统化路径
大数据·数据库·人工智能
小王爱学人工智能22 分钟前
利用OpenCV进行指纹识别的案例
人工智能·opencv·计算机视觉
代码AI弗森23 分钟前
DPO 深度解析:从公式到工程,从偏好数据到可复用训练管线
人工智能
Q_Q196328847528 分钟前
python+springboot+uniapp微信小程序题库系统 在线答题 题目分类 错题本管理 学习记录查询系统
spring boot·python·django·uni-app·node.js·php
Elastic 中国社区官方博客29 分钟前
使用 LangExtract 和 Elasticsearch
大数据·人工智能·elasticsearch·搜索引擎·ai·信息可视化·全文检索