python+opencv提取.mp4 视频的每一帧并将其保存为图片

提取 .mp4 视频的每一帧并将其保存为图片,可以使用 cv2 库(OpenCV)。下面是一个完整的示例代码,演示如何使用 OpenCV 提取视频的每一帧并将其保存为图片,使用时需要将mp4文件及路径放至video_path ,提取的图片存储的路径放至output_folder

import cv2
import osdef extract_frames(video_path, output_folder):# 打开视频文件video_capture = cv2.VideoCapture(video_path)# 检查视频是否成功打开if not video_capture.isOpened():print(f"Error opening video file: {video_path}")return# 确保输出文件夹存在,如果不存在则创建if not os.path.exists(output_folder):os.makedirs(output_folder)frame_count = 0while True:# 逐帧读取视频ret, frame = video_capture.read()# 如果读取失败,退出循环if not ret:break# 翻转图像(垂直翻转)frame = cv2.flip(frame, 0)# 构建帧的输出文件路径frame_filename = os.path.join(output_folder, f"frame_{frame_count:04d}.png")# 保存帧为图片cv2.imwrite(frame_filename, frame)# 打印保存信息print(f"Saved: {frame_filename}")frame_count += 1# 释放视频捕捉对象video_capture.release()print("Finished extracting frames.")# 使用示例
video_path = "example.mp4"  # 输入视频文件路径
output_folder = "output_frames"  # 输出图片保存文件夹extract_frames(video_path, output_folder)

如果保存的图片方向不对,可以通过使用 cv2.rotate() 函数进行图像反转,比如需要每个图片都顺时针转90度,代码修改如下:

import cv2
import osdef extract_frames(video_path, output_folder):# 打开视频文件video_capture = cv2.VideoCapture(video_path)# 检查视频是否成功打开if not video_capture.isOpened():print(f"Error opening video file: {video_path}")return# 确保输出文件夹存在,如果不存在则创建if not os.path.exists(output_folder):os.makedirs(output_folder)frame_count = 0while True:# 逐帧读取视频ret, frame = video_capture.read()# 如果读取失败,退出循环if not ret:break# 旋转图像 90 度(顺时针)frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)# 构建帧的输出文件路径frame_filename = os.path.join(output_folder, f"frame_{frame_count:04d}.png")# 保存帧为图片cv2.imwrite(frame_filename, frame)# 打印保存信息print(f"Saved: {frame_filename}")frame_count += 1# 释放视频捕捉对象video_capture.release()print("Finished extracting frames.")# 使用示例
video_path = "example.mp4"  # 输入视频文件路径
output_folder = "output_frames"  # 输出图片保存文件夹extract_frames(video_path, output_folder)

比如需要每个图片都顺时针转180度,代码修改如下:

import cv2
import osdef extract_frames(video_path, output_folder):# 打开视频文件video_capture = cv2.VideoCapture(video_path)# 检查视频是否成功打开if not video_capture.isOpened():print(f"Error opening video file: {video_path}")return# 确保输出文件夹存在,如果不存在则创建if not os.path.exists(output_folder):os.makedirs(output_folder)frame_count = 0while True:# 逐帧读取视频ret, frame = video_capture.read()# 如果读取失败,退出循环if not ret:break# 旋转图像 180 度(顺时针)frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)# 构建帧的输出文件路径frame_filename = os.path.join(output_folder, f"frame_{frame_count:04d}.png")# 保存帧为图片cv2.imwrite(frame_filename, frame)# 打印保存信息print(f"Saved: {frame_filename}")frame_count += 1# 释放视频捕捉对象video_capture.release()print("Finished extracting frames.")# 使用示例
video_path = "example.mp4"  # 输入视频文件路径
output_folder = "output_frames"  # 输出图片保存文件夹extract_frames(video_path, output_folder)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02--大数据Hadoop集群实战

前言: 前面整理了hadoop概念内容,写了一些概念和本地部署和伪分布式两种,比较偏向概念或实验,今天来整理一下在项目中实际使用的一些知识点。 1、基础概念 1.1、完全分布式 Hadoop是一个开源的分布式存储和计算框架&#xff0…

C++对C的扩充

C既可用于面向过程的程序设计,也可用于面向对象的程序设计。在面向过程程序设计的领域,C继承了C语言提供的绝大部分功能和语法规定,并在此基础上做了不少扩充,主要有一下几个方面: 1.C的输入输出 C为了方便用户&…

Spring 事务源码分析

前言: 我们知道 Spring 声明式事务是通过 AOP 来实现的,日常项目开发中我们只需要使用 Transactional 注解就可以实现声明式事务,那你知道通过 Transactional 注解怎样实现事务的吗?本篇我们将从源码来分析 Spring 声明式事务的执…

STM32定时器四大功能之定时器编码接口

1什么是编码器接口? 编码器接口接受编码器的正交信号,根据编码器产生的正交信号脉冲控制CNT的自增和自减,从而指示编码器的旋转方向和旋转速度。 每个高级定时器和通用定时器都有一个编码器接口,同时正交编码器产生的正交信号分…

Redis 的持久化(真的好细)

前言 Redis 是一个内存数据库,把数据存储在内存中,而内存中的数据是不持久的,要想数据持久就得将数据存储到硬盘中,而 Redis 相比于 Mysql 这样的关系型数据库最大的优势就在于将数据存储在内存中从而效率更高,速度更快…

docker 安装RabbitMQ-web版本

直接拉去web版本 docker pull rabbitmq:management启动命令 设置用户名 admin 密码123456 docker run -dit --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASS123456 rabbitmq:management访问地址 http://127.0.0.1:…

配置证书443访问 -- 集成框架

配置证书443访问 前言正文步骤1: 准备证书基于Nginx镜像 前言 由于业务要求需要对当前网络请求服务器不走80端口,进行443 https证书访问。 文档有点丑见谅,我还没加样式 正文 要让运行在Docker容器中的前端应用在443端口上使用SSL/TLS证书&#xff0…

【x264】编码核心函数(x264_encoder_encode)的简单分析

【x264】编码模块(x264_encoder_encode)简单分析 1.编码帧函数(x264_encoder_encode)1.1 拷贝一帧并移动到buffer中(x264_frame_pop_unused)1.2 拷贝一帧送入队列用于确定帧类型(x264_lookahead…

EC2 Linux 开机自启脚本:必要性和实现

在 Amazon EC2 Linux 实例上配置开机自启脚本是一个常见的需求。这种自启动脚本具有重要的实践意义,主要体现在以下几个方面: 必要性 服务自动启动 当 EC2 实例启动时,可以自动启动一些关键服务,如 Web 服务、数据库服务等,而不需要手动去启动。这有助于提高服务的可用性和可靠…

GeoScene产品学习视频收集

1、易智瑞运营的极思课堂https://www.geosceneonline.cn/learn/library 2、历年易智瑞技术公开课视频资料 链接:技术公开课-易智瑞信息技术有限公司,GIS/地理信息系统,空间分析-制图-位置智能-地图 3、一些关于GeoScene系列产品和技术操作的视…

Unity2024面试总结(适用3-5年经验以上)

文章目录 前言一、基础芝士1、说下你对面向对象的理解2、说下协程和线程的区别3、说下内存优化这块内容4、说下GPU优化这块内容5、说下对DrawCall的理解6、向量的点乘、叉乘7、数据结构、算法 二、进阶芝士1、框架与核心模块2、说下你在项目中使用过的设计模式3、架构思想4、如…

二进制部署k8s集群 部署高可用master节点

目录 本次部署的环境 一、master02 节点部署 二、负载均衡部署 安装nginx服务 部署keepalive服务 修改node节点上的配置文件 在master节点上创建pod 三、部署 Dashboard 二进制部署k8s集群部署的步骤总结 (1)k8s的数据存储中中心的搭建 etcd &…

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

漏洞复现环境搭建请参考 http://t.csdnimg.cn/MxmId 漏洞版本 Apache Log4j 2.8.2之前的2.x版本 漏洞验证 (1)开放端口4712 漏洞利用 (1)ysoserial工具获取 wget https://github.com/frohoff/ysoserial/releases/download/v0…

Flink DataStream API 基础算子(一)

一、介绍 官网 DataStream API 得名于特殊的 DataStream 类,该类用于表示 Flink 程序中的数据集合。你可以认为 它们是可以包含重复项的不可变数据集合。这些数据可以是有界(有限)的,也可以是无界(无限)的…

spring启动后自动退出了

在项目中启动spring框架的application,但是还未等到接口访问它就自己退出了,运行截图如下所示: 解决办法: 将build.gradle文件里的依赖修改一下。我原先的依赖是: org.springframework:spring-web:5.3.10 现修改为 …

2024 电工杯高校数学建模竞赛(B题)| 平衡膳食食谱 |建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,运用负载均衡,多目标规划等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍&am…

2024-05-20 问AI:介绍一下大语言模型的in-context learning

文心一言 大语言模型的in-context learning(ICL)是指模型在不进行参数更新的情况下,仅通过少量示例或指令,快速适应新的任务和领域的能力。 传统的机器学习方法通常需要大量的标注数据来训练模型,而ICL的出现为我们提…

肯尼亚大坝决堤反思:强化大坝安全监测的必要性

一、背景介绍 近日,肯尼亚发生了一起严重的大坝决堤事件。当地时间4月29日,肯尼亚内罗毕以北的一座大坝决堤,冲毁房屋和车辆。当地官员称,事故遇难人数已升至71人。这起事件再次提醒我们,大坝安全无小事,监…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-23.1,2 讲 I2C驱动

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

C#一些高级语法

目录 C# 特性(Attribute) 规定特性(Attribute) 预定义特性(Attribute) AttributeUsage Obsolete 创建自定义特性(Attribute) 声明自定义特性 构建自定义特性 C# 反射&#…