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

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: 布尔值控制是否转为灰度图

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

相关文章:

  • 问题及解决02-处理后的图像在坐标轴外显示
  • 用自写的jQuery库+Ajax实现了省市联动
  • c++STL-list的模拟实现
  • MyBatis 批量新增与删除功能完整教程
  • python_竞态条件
  • windowsC++操作ADB
  • ansible进阶版01
  • js中的同步方法及异步方法
  • Unity引擎源码-物理系统详解-其一
  • 抗量子计算攻击的数据安全体系构建:从理论突破到工程实践
  • C# 通用OCR识别
  • 基于TI AM6442+FPGA解决方案,支持6网口,4路CAN,8个串口
  • CSS3 基础知识、原理及与CSS的区别
  • 洛谷 P3374 【模板】树状数组 1(树状数组解法)
  • Qt在统信UOS及银河麒麟Kylin系统中进行软件开发的环境配置,打包发布和注意事项
  • spark sql基本操作
  • 百度智能云千帆携手联想,共创MCP生态宇宙
  • 【计算机网络 第8版】谢希仁编著 第四章网络层 题型总结3 SDN OpenFlow
  • webpack重构优化
  • 运行Spark程序-在Idea中
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 人民币对美元即期汇率盘中创半年新高,离岸市场升破7.2
  • 文学花边|对话《借命而生》原著作者石一枫:我给剧打90分
  • 中美经贸中方牵头人、国务院副总理何立峰出席新闻发布会表示:中美达成重要共识,会谈取得实质性进展
  • 法院就“行人相撞案”道歉:执法公正,普法莫拉开“距离”
  • 印巴战火LIVE丨“快速接近战争状态”:印度袭击巴军事基地,巴启动反制军事行动