- 下载FFmpeg,解压后将bin目录添加到环境变量 https://www.ffmpeg.org/,也可以使用opencv
- 修改
crop_time
后面的时间和videoPath
、imagePath
即可
**注意:**images后面需要有 两个\\
import os
def getImage(videoPath, imagePath):
img_count = 1
crop_time = 0.0
#转化多少秒的视频
while crop_time <= 40.0:
os.system('ffmpeg -i %s -f image2 -ss %s -vframes 1 %s.png' % (videoPath, str(crop_time), imagePath + str(img_count)))
img_count += 1
print('Geting Image ' + str(img_count) + '.png' + ' from time ' + str(crop_time))
#每多少秒截取一张照片
crop_time += 0.25
print('Image Collected')
if __name__ == '__main__':
videoPath = r'D:\ARDemo\2019_06_25_12_31_16_645.mp4'
#注意:images后面需要有 两个\\
imagePath = r'D:\ARDemo\images\\'
getImage(videoPath, imagePath)
由于需求变更,需要对路口进行扩展补充,数据是间断的且分布在不同包
可以根据图片的名字批量提取对应的图片并保存到另一个文件夹
【间断数据图】
- 整体提取图片
先把分布在各个文件夹内所有图片提取到一个文件夹下
# -*- coding: utf-8 -*-
import time
import os
import shutil
def get_file(root_path,suffix):
try:
for dir_name in os.listdir(root_path):
exts = suffix.split(' ')
#获取目录或文件的路径
file_path = os.path.join(root_path,dir_name)
#判断路径为文件还是路径
if os.path.isdir(file_path):
#递归获取所有文件和目录的路径
get_file(file_path,suffix)
else:
for ext in exts:
#根据后缀名判断文件类别
if(dir_name.endswith(ext)):
file_exits_path = to_path + '\\' + dir_name
#如果文件夹在移动的目录下,跳过它
if not os.path.exists(file_exits_path):
shutil.copy(file_path,to_path)
except FileNotFoundError:
print('地址输入错误,请检查地址'.center(20,'-'))
time.sleep(1.2)
if __name__ == "__main__":
root_path = input('请输入 图片 所在地址:')
to_path = input('请输入 图片 要存放的地址:')
suffix = '.png .jpg .psd .afphoto'
get_file(root_path,suffix)
- 再把需要提取的文件写入到getImage.txt 文件中,根据名称提取文件。
也可以使用 图像处理库PIL 中的Image.open -> save 方法,不过提取较慢
当然也可以 根据名称提取指定文件夹,把 shutil.copy -> shutil.move (相当于剪切) 即可
# -*- coding: UTF-8 -*-
import shutil
root_path = input('请输入 图片 所在地址:')
to_path = input('请输入 图片 要存放的地址:')
data = []
for line in open(r"C:\Users\Desktop\getImage.txt", "r"): # 设置文件对象并读取每一行文件
data.append(line)
for a in data:
file_path = root_path + '/{}'.format(a[:-1])
shutil.copy(file_path, to_path)
- 整体提取文件夹(补充)
由于文件夹层级结构可能些许复杂:一个一级目录下可能有很多二级目录,一个二级目录下可能有很多文件,把这些文件夹提取出来放到一个目录下以便处理
# _*_coding:utf-8
import os
import shutil
import time
def get_file(root_path,suffix):
try:
for dir_name in os.listdir(root_path):
exts = suffix.split(' ')
#获取目录或文件的路径
file_path = os.path.join(root_path,dir_name)
#判断路径为文件还是路径
if os.path.isdir(file_path):
#递归获取所有文件和目录的路径
get_file(file_path,suffix)
else:
for ext in exts:
#根据后缀名判断文件类别
if(dir_name.endswith(ext)):
fileName_listdir = '\\'.join(file_path.split('\\')[:-1])
if fileName_listdir not in data_address:
data_address.append(fileName_listdir)
except FileNotFoundError:
print('地址输入错误,请检查地址'.center(20,'-'))
time.sleep(1.2)
def main():
get_file(root_path,suffix)
# datas = list(set(data_address))
for data in data_address:
data_split = to_path + '\\' + data.split('\\')[-1]
#如果文件夹存在移动的目录下,跳过它
if not os.path.exists(data_split):
shutil.move(data,to_path)
print('文件夹拷贝完成'.center(20,'-'))
time.sleep(1.2)
if __name__ == "__main__":
root_path = input('请输入 文件夹 所在地址:')
to_path = input('请输入 文件夹 移动到的地址:')
suffix = '.jpg'
data_address = []
main()