CV | Python+OpenCV 提取avi和mp4格式视频中的关键帧

简介

最近在处理实验数据,做实验得到一堆视频文件,想从中选择有用的图像文件,网上找到了一些将视频文件按帧提取为静态图像的程序。

1. OpenCV 处理 .avi文件

转自: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')

2. OpenCV 处理 .mp4文件

转自: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()

你可能感兴趣的:(python,学习总结,Computer,Vision)