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

python使用OpenCV 库将视频拆解为帧并保存为图片

python使用OpenCV 库将视频拆解为帧并保存为图片

import cv2
import osdef video_to_frames(video_path, output_folder, frame_prefix='frame_', interval=1, target_size=None, grayscale=False):"""将视频拆分为帧并保存为图片参数:video_path (str): 视频文件路径output_folder (str): 输出图片的文件夹路径frame_prefix (str): 保存帧图片的前缀(默认: frame_)interval (int): 抽帧间隔(默认: 1,即所有帧)target_size (tuple): 目标尺寸 (宽, 高),None表示保持原尺寸(默认)grayscale (bool): 是否转换为灰度图(默认: False)"""# 创建输出文件夹os.makedirs(output_folder, exist_ok=True)# 读取视频文件cap = cv2.VideoCapture(video_path)if not cap.isOpened():print("Error: 无法打开视频文件")returnframe_count = 0saved_count = 0while True:ret, frame = cap.read()if not ret:break  # 视频读取结束# 按间隔处理帧if frame_count % interval == 0:processed_frame = frame.copy()# 调整尺寸if target_size is not None:processed_frame = cv2.resize(processed_frame, target_size)# 转换为灰度图if grayscale:processed_frame = cv2.cvtColor(processed_frame, cv2.COLOR_BGR2GRAY)# 生成文件名filename = f"{frame_prefix}{saved_count:04d}.jpg"file_path = os.path.join(output_folder, filename)# 保存图片cv2.imwrite(file_path, processed_frame)saved_count += 1frame_count += 1# 释放资源cap.release()print(f"处理完成,共保存 {saved_count} 帧图片")print(f"视频总帧数: {frame_count}")# 使用示例
if __name__ == "__main__":video_path = r"E:\photo\video\1.mp4"  # 替换为你的视频路径output_folder = r"E:\photo\video\1"  # 输出文件夹# 示例1:提取所有帧(原始尺寸和颜色)video_to_frames(video_path, output_folder)# 示例2:调整尺寸为 640x480,保存为灰度图,每隔10帧保存一次# video_to_frames(#     video_path,#     output_folder,#     interval=10,#     target_size=(640, 480),#     grayscale=True# )# 示例3:仅调整尺寸为 1280x720# video_to_frames(#     video_path,#     output_folder,#     target_size=(1280, 720)# )
  • target_size: 接收元组格式 (width, height)

  • grayscale: 布尔值控制是否转为灰度图

  • 先执行尺寸调整(保留更多原始信息)后执行灰度转换(减少最后一步的计算量)

http://www.xdnf.cn/news/6083.html

相关文章:

  • 【Mac 从 0 到 1 保姆级配置教程 15】- Python 环境一键安装与配置,就是这么的丝滑
  • 虚拟机Ubuntu系统怎么扩展容量,扩展容量后进不去系统怎么办?
  • python共享内存实际案例,传输opencv frame
  • Python面向对象编程(OOP)深度解析:从封装到继承的多维度实践
  • 【论信息系统项目的资源管理】
  • 【Git】合并和变基的区别
  • windows 强行终止进程,根据端口号
  • 人工智能技术演进:从多模态融合到智能体落地的实践探索
  • uart16550详细说明
  • 使用虚拟机Linux写程序
  • 网站开发过程中样式忽然不显示问题
  • GOOSE协议publisher上传频率
  • Playwright 安装配置文件详解
  • 爆肝整理!软件测试面试题整理(项目+接口问题)
  • OpenCV特征处理全解析:从检测到匹配的完整指南
  • 二分查找算法的思路
  • linq中 List<T>.ForEach() 与 的 Select() 方法区别——CAD c#二次开发
  • HCIP实验(BGP联邦实验)
  • 21.three官方示例+编辑器+AI快速学习webgl_buffergeometry_selective_draw
  • Q1财报持续向好,腾讯音乐如何在不确定中寻找确定性?
  • 如何将两台虚拟机进行搭桥
  • 防重入或并发调用(C++)
  • C语言指针循环使用指南
  • Ansys 产品在Windows系统的卸载(2025R1版)
  • 【Redis】RedLock实现原理
  • 笔试强训(十七)
  • 12.1寸工业液晶屏M121XGV20-N10显示单元技术档案
  • 126.在 Vue 3 中使用 OpenLayers 实现绘制正方形、正三角形、正五边形
  • 使用PHP对接日本股票市场数据
  • 数据工具:数据同步工具、数据血缘工具全解析