关于python:PythonOpencv解析一段视频并逐帧保存到本地

实现原理

应用Python+Opencv,把视频流间接按帧率解析成图片,并保留到本地

特点

能够做到忽视视频的长短,视频的帧率。多长就解析多长,多少帧率就解析多少帧率,视频解析完间接退出,防止影响内存或者Opencv窗口卡死

实现的成果

针对一个本地视频:
①时长:从1.02-4.22,共计3.21s
②图片:每秒60张,视频解析进去共计3*60+21=201张图片,如下:

脚本

# -*- coding: cp936 -*-

"""
Author:NoamaNelson
Date:2019-11-15
Discription:Reading video swtich to picture and save 
"""

import cv2,os,time
import numpy as np

class CamaroCap(object):

    """ 关上视频流 """
    def __init__(self):

        self.cap = cv2.VideoCapture("./MVI_1637.MOV")  # 视频门路,间接把脚本和视频放在同一个目录下最好,也能够指定对应的视频门路

    """ 图片信息打印 """      
    def get_image_info(self,image):
        print(type(image))
        print(image.shape)
        print(image.size)
        print(image.dtype)
        pixel_data = np.array(image)
        print(pixel_data)

    """ 逐帧读取数据并保留图片到本地制订地位 """
    def Camaro_image(self):
        i = 0
        while(True):
            ret,frame = self.cap.read() #ret:True或者False,代表有没有读取到图片;frame:示意截取到一帧的图片
            if ret == False:
                break
            
            self.get_image_info(frame) # print("打印图片信息") 留神:调试的时候能够关上,如果是始终运行程序,倡议把这行代码正文掉,防止影响内存占用          
            
            cv2.imshow('capture',frame) # 展现图片
            
            cv2.imwrite(r"D:\image\\"+ str(i) + ".jpg",frame)  # 保留图片
            i = i + 1

            if cv2.waitKey(1) & 0xFF == ord('q'): 
                break  

if __name__ == '__main__':

    outmasages = CamaroCap() 
    
    outmasages.Camaro_image() # 调用摄像头
    
    outmasages.cap.release() # 开释对象和销毁窗口
    cv2.destroyAllWindows()
    

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据