目录
前言
注意:opencv读取的视频不能有中文路径。
cv2中imread和imwrite读取图片的路径不能包含中文或者空格,只能为英文或者数字,否则报错!
但是可以采用相对路径,是英文的就可以了。
一、单个视频单个文件夹保存
# 导入所需要的库
import cv2
import numpy as np
# 定义保存图片函数
# image:要保存的图片名字
# addr;图片地址与相片名字的前部分
# num: 相片,名字的后缀。int 类型
def save_image(image, addr, num):
address = addr + str(num) + '.jpg'
cv2.imwrite(address, image)
# 读取视频文件 视频文件路径
videoCapture = cv2.VideoCapture("./video/1.mp4")
# 通过摄像头的方式
# videoCapture=cv2.VideoCapture(1)
# 读帧
success, frame = videoCapture.read()
i = 0
timeF = 1
j = 0
while success:
i = i + 1
if (i % timeF == 0):
j = j + 1
save_image(frame, './video/', j) # 视频截成图片存放的位置
print('save image:', i)
success, frame = videoCapture.read()
二、文件夹下多个视频一起处理
# 将现场拍的视频抽针转为图片,保存到img文件夹
# -*- coding:utf8 -*-
import time
import cv2
import os
import shutil
from tqdm import tqdm
import datetime
def get_frame_from_video(video_fold, interval, des_path):
"""
Args:
video_name:输入视频名字
interval: 保存图片的帧率间隔
img_num: 图片命名的ID号
Returns:
"""
videos = os.listdir(video_fold)
j = 0
for i in tqdm(range(len(videos))):
# 保存图片的路径
save_path = os.path.join(des_path, videos[i].split('.')[0])
os.makedirs(save_path, exist_ok=True)
# 开始读视频
video_capture = cv2.VideoCapture(os.path.join(video_fold, videos[i]))
print(os.path.join(video_fold, videos[i]))
while True:
# s = time.time()
success, frame = video_capture.read()
# e = time.time()
# print(e-s)
if not success:
break
j += 1
if j % interval == 0:
# 保存图片
save_name = videos[i].split('.')[0] + '_' + str(j) + '.jpg'
cv2.imwrite(os.path. join(save_path, save_name), frame)
#print('image of %s is saved' % save_name)
print('Done')
if __name__ == '__main__':
video_path = "./video/"
des_path = './video'
# get_frame_from_video(video_path, 50, des_path)
start = datetime.datetime.now()
print("Start running time: %s" % start)
get_frame_from_video(video_path, 10, des_path)# 你运行的程序,也就是你的代码块,或者函数
end=datetime.datetime.now()
print("End running time: %s" % end)
print('Running time: %s Seconds'%(end-start))