Python OpenCV 按帧分割视频为图片

Python OpenCV 按帧分割视频为图片,第1张

yolov5炼丹需要大量图片,在手上有视频素材的前提下,可以截图大量图片。


找了下网上的代码都不太符合要求,干脆自己写一个。


输入:指定位置文件夹里的全部视频

输出:指定位置文件夹,图片从0开始依次排好,就算截n个视频也不会重复标签。


如果有懂优化效率的可以帮忙看看代码,总感觉跑得有些慢……

import cv2
import os
import time

'''
注意路径名和文件名不能有中文
路径之间加双斜杠

'''

# 视频数据主目录,需要自行修改,否则报错
video_path = 'C:\\Users\\example\\videos\\origin video' 
# 帧文件保存目录,需要自行修改,否则报错
save_path = 'C:\\Users\\example\\videos\\saved picture' 

framerate = 3  # 每秒读取约30/n张图片,即每隔n帧截取一帧。


修改该参数即可修改图片总数 # 视频读取函数 def video_split(v_name, # 读取视频名字 pic_num, # 视频中帧总数 framerate # 帧数截取间隔,每隔n帧截取一阵 ): v_path = video_path + '\\' + v_name # 读取视频地址 cap = cv2.VideoCapture(v_path) # 读取视频 rval = cap.isOpened() # 判断是否读取成功 while rval: rval, frame = cap.read() # 获取视频帧数图片 if rval: if (pic_num % framerate == 0): # 符合第n帧取帧数图的条件 cv2.imwrite(save_path + '\\' + str(int(pic_num/framerate)) + '.jpg', frame) pic_num += 1 cv2.waitKey(1) return pic_num # 返回第n个视频的帧总数 pic_num = 0 # 图片序号 video_num = 0 # 视频个数 start_time = time.time() print('正在读取视频……') videos = os.listdir(video_path) # 读取所有视频列表 if videos: print('正在截图,请稍后……') for video in videos: pic_num = video_split(video, pic_num, framerate) video_num += 1 end_time = time.time() print('截取图片完成!') print( '从'+ str(video_num)+ '个视频中共截取约'+ str(int(pic_num/framerate))+ '张图片,每秒截取约'+ str(int(30/framerate))+ '张图片,共耗费'+ str("%.2f"%(end_time - start_time))+ '秒') else: print('没有检测到视频。


请在指定文件夹中放入视频,或检查文件夹路径是否错误')

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/570839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存