最近在处理实验数据,做实验得到一堆视频文件,想从中选择有用的图像文件,网上找到了一些将视频文件按帧提取为静态图像的程序。
转自:https://blog.csdn.net/qq_42393859/article/details/86572670
问题描述:
使用OpenCV把 .avi 视频切分成静态图像,提取视频中的关键帧,保存为0.jpg、1.jpg、2.jpg…
程序:
from PIL import Image
import cv2
def splitFrames(videoFileName):
cap = cv2. VideoCapture(videoFileName) # 打开视频文件
num = 1
while True:
# success 表示是否成功,data是当前帧的图像数据;.read读取一帧图像,移动到下一帧
success, data = cap.read()
if not success:
break
im = Image.fromarray(data) # 重建图像
im.save('C:/Users/Taozi/Desktop/2019.04.30/' +str(num)+".jpg") # 保存当前帧的静态图像
num = num + 1
print(num)
cap.release()
splitFrames('C:/Users/Taozi/Desktop/2019.04.30/模拟实验.avi')
转自:https://blog.csdn.net/a486259/article/details/84787288
问题描述:
使用OpenCV把.mp4 视频切分成静态图像,提取视频中的关键帧.
程序:
import cv2
import os
#要提取视频的文件名,隐藏后缀
sourceFileName='a2'
#在这里把后缀接上
video_path = os.path.join("", "", sourceFileName+'.mp4')
times=0
#提取视频的频率,每25帧提取一个
frameFrequency=25
#输出图片到当前目录vedio文件夹下
outPutDirName='vedio/'+sourceFileName+'/'
if not os.path.exists(outPutDirName):
#如果文件目录不存在则创建目录
os.makedirs(outPutDirName)
camera = cv2.VideoCapture(video_path)
while True:
times+=1
res, image = camera.read()
if not res:
print('not res , not image')
break
if times%frameFrequency==0:
cv2.imwrite(outPutDirName + str(times)+'.jpg', image)
print(outPutDirName + str(times)+'.jpg')
print('图片提取结束')
camera.release()