共计 1097 个字符,预计需要花费 3 分钟才能阅读完成。
实现原理
应用 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() | |
正文完