专栏首页学习小记视频逐帧读取并保存至指定文件夹(opencv之python描述)
原创

视频逐帧读取并保存至指定文件夹(opencv之python描述)


opencv遇到的问题:

原代码中读取每帧图片的代码行为:

frame = video.read()

报错如下:

cv2.imencode('.jpg', frame)[1].tofile(img_file) TypeError: Expected Ptr<cv::UMat> for argument '%s'

将其改为:

flag, frame = video.read()

运行正常。


文件存储的形式

代码.py

img文件夹(保存视频帧)

视频1文件夹

视频1的每帧图片

视频2文件夹

视频2的每帧图片

……

video文件夹(存储视频文件)

视频1.avi

视频2.avi

……


代码如下:

import cv2
import os
import json


def get_frame(video_path):
    res = []
    for each in os.listdir(video_path):
        new_path = os.path.join(video_path, each)
        video = cv2.VideoCapture(new_path)
        img_path = './img' + '/' + str(each.split('.')[0])
        if not os.path.exists(img_path):
            os.mkdir(img_path)
        os.chdir(img_path) #改变当前工作目录至图片保存文件夹
        img_num = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
        video_fps = video.get(cv2.CAP_PROP_FPS)
        video_size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)),
                      int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
        video_message = {'name': each, 'fps': video_fps, 'size': video_size, 'nums': img_num}
        res.append(video_message)
        for i in range(img_num):
            flag, frame = video.read()
            img_file = '0000' + str(i) + '.jpg'
            print(img_file)
            cv2.imencode('.jpg', frame)[1].tofile(img_file)
        video.release()
        os.chdir(os.path.dirname(os.path.abspath(__file__)))# 返回代码工作目录
    with open('data.json', 'w') as f:
        json.dump(res, f)


if __name__ == '__main__':
    videoPath = "./video"
    get_frame(videoPath)

更多opencv处理视频的相关知识

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 虚拟机环境下,Ubuntu16.04中安装anaconda3 TensorFlow

    使用火狐浏览器,访问https://repo.anaconda.com/archive/,选择合适版本进行下载。

    用户4908836
  • python之第三方库安装及使用(wordcloud库)

    用户4908836
  • python之第三方库安装及使用(jieba库)

    用户4908836
  • layer弹出层中H5播放器全屏出错解决 & 属性poster底图占满video的方法

    所以,目前的解决办法是在layer层创建之后,移除这个class即可(注意在success回调中置于下一轮事件循环)

    书童小二
  • Yii2 UploadedFile上传文件

    原文链接:https://blog.csdn.net/lilongsy/article/details/84620377

    双面人
  • 澳政府采用生物识别技术防范鲨鱼袭击

    据英国《每日电讯报》报道,澳大利亚新南威尔士州政府正在测试一款新型的“Clever Buoy(智能浮标)”鲨鱼探测系统,该系统结合了声纳与生物识别技术,可监测水...

    人工智能快报
  • 让CarbonData使用更简单

    我之前写过一篇使用的文章。CarbonData集群模式体验。到0.3.0版本,已经把kettle去掉了,并且我提交的PR已经能够让其在Spark Streami...

    用户2936994
  • [问题贴]mui.openWindow+自定义事件监听操作让alert()执行两次

    仔细看,Alert函数执行了两次 共两个页面:index.html和detail.html, detail.html为按钮设置了自定义事件监听(newsId...

    CN_Simo
  • 【python入门系类课程 第二课 和计算机对个话】

    本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地...

    用户7054460
  • 紧急预警 | 高危病毒“永恒之石”来袭

    1. 事件 WannaCry勒索病毒余波未平,如今又出现了更变本加厉的EternalRocks(“永恒之石”)新病毒。永恒之石来势汹汹,利用了之前泄露的NSA武...

    安恒信息

扫码关注云+社区

领取腾讯云代金券