视频按帧截图

'''
注意路径名和文件名不能有中文
路径之间加双斜杠
'''

import cv2
import os
import time

'''
注意路径名和文件名不能有中文
路径之间加双斜杠
'''

# 视频数据主目录,需要自行修改,否则报错
video_path = 'C:\\Users\\wang\\Desktop\\11'
# 帧文件保存目录,需要自行修改,否则报错
save_path = 'C:\\Users\\wang\\Desktop\\12'

framerate = 3  # 每秒读取约30/n张图片,即每隔n帧截取一帧。修改该参数即可修改图片总数


# 视频读取函数
def video_split(v_name,  # 读取视频名字
                pic_num,  # 视频中帧总数
                framerate  # 帧数截取间隔,每隔n帧截取一阵
                ):
    v_path = video_path + '\\' + v_name  # 读取视频地址
    cap = cv2.VideoCapture(v_path)  # 读取视频
    rval = cap.isOpened()  # 判断是否读取成功

    while rval:
        rval, frame = cap.read()  # 获取视频帧数图片
        if rval:
            if (pic_num % framerate == 0):  # 符合第n帧取帧数图的条件
                cv2.imwrite(save_path + '\\' + str(int(pic_num / framerate)) + '.jpg', frame)
            pic_num += 1
            # cv2.waitKey(1)
    return pic_num  # 返回第n个视频的帧总数


pic_num = 0  # 图片序号
video_num = 0  # 视频个数

start_time = time.time()
print('正在读取视频……')
videos = os.listdir(video_path)  # 读取所有视频列表

if videos:

    print('正在截图,请稍后……')
    for video in videos:
        pic_num = video_split(video, pic_num, framerate)
        video_num += 1
    end_time = time.time()

    print('截取图片完成!')
    print('从' +
          str(video_num) +
          '个视频中共截取约' +
          str(int(pic_num / framerate)) +
          '张图片,每秒截取约' +
          str("%.1f" % (30 / framerate)) +
          '张图片,共耗费' +
          str("%.2f" % (end_time - start_time)) +
          '秒')

else:
    print('没有检测到视频。请在指定文件夹中放入视频,或检查文件夹路径是否错误')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千山凌源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值