• python遍历目录下的所有目录和文件,并用opencv从mp4文件中抽帧得到图片


    原博客搬移到:https://blog.csdn.net/u013171226/article/details/107680279

    做深度学习训练的时候,需要从mp4视频文件中抽帧得到图片数据,其中mp4文件是保存在一个大文件夹下的不同子文件夹下面的,用下面的python脚本实现

    import cv2
    import os
    
    """根据传入的目录参数,得到该目录所有子文件夹下的所有的mp4文件"""
    def get_mp4path(main_dir):
        list_mp4 = []
        for root, dirs, files in os.walk(main_dir):
            for file in files:
                if file.endswith(".mp4"):  #只要mp4文件,
                    #print(os.path.join(root, file))
                    list_mp4.append(os.path.join(root, file))
        return list_mp4 #得到所有的mp4文件的列表(包含路径)
    
    """根据传入的目录地址和MP4文件的名字,从视频文件中抽帧得到图片数据并保存"""
    def get_image(path):
        print(path)#调试,记得删除
        mp4_path, mp4_name = os.path.split(path)  #分别得到目录和文件名
        cap=cv2.VideoCapture(path)
        i=0
        j=0
        timeF=50
        while(True):
            i=i+1
            ret,frame=cap.read()
            if(i % timeF == 0):       #每隔50帧保存一次。
                save_name=str(j)+".jpg"
                j = j + 1
                save_path=os.path.join(mp4_path, save_name)
                if (ret):
                    #cv2.imwrite(save_path, frame) #保存路径中包含中文,不能用imwrite保存,要用下一行的imencode的方法。
                    ret = cv2.imencode('.jpg', frame)[1].tofile(save_path)#[1]表示imencode的第二个返回值,也就是这张图片对应的内存数据
                else:
                    break
    
    if __name__ == '__main__':
        #get_image(pathImage)
        list_all = get_mp4path(r'F:非国标')## 前面的r是告诉解释器保持字符串的原始值,不要对其中的进行转义,如果不加r,那么路径要改成"F:/非国标"或者"F:\非国标"
        for list in list_all:
            #print(list)
            get_image(list)

    作者:cumtchw
    出处:http://www.cnblogs.com/cumtchw/
    我的博客就是我的学习笔记,学习过程中看到好的博客也会转载过来,若有侵权,与我联系,我会及时删除。

  • 相关阅读:
    JS之事件及冒泡
    DOM读取和修改内联样式
    dom查询与修改的一些常用方法
    js修改this指向的三种方法(call,bind,apply)
    JS原型概念
    JS创建对象
    JS的this(谁调用就指向谁)
    变量声明提前与函数声明提前
    JS对象创建
    正则应用之数据采集房屋网站信息
  • 原文地址:https://www.cnblogs.com/cumtchw/p/12443134.html
Copyright © 2020-2023  润新知