Python实现基于OpenCV的视频自动截图

话不多说,直接上代码

import cv2

def capFrame(videoPath, savePath):
    cap = cv2.VideoCapture(videoPath)
    numFrame = 0
    while True:
        if cap.grab():
            numFrame += 1
            # 每60桢截取一个图片
            if numFrame % 60 == 1:
                #retrieve 解码并返回一个桢
                flag, frame = cap.retrieve()
                if not flag:
                    continue
                else:
                    cv2.imshow('video', frame)
                    newPath = savePath + "\\" + str(int(numFrame/60)) + ".jpg"
                    cv2.imencode('.jpg', frame)[1].tofile(newPath)
        #检测到按下Esc时,break(和imshow配合使用)
        if cv2.waitKey(10) == 27:
            break


capFrame('C:\\Users\\Administrator\\Desktop\\2c61544388d0110b352811dbaa8760b4.mp4','C:\\Users\\Administrator\\Desktop\\new')
值得注意的是,输入的文件路径中的分隔符应该是“\\”(在Windows下)

除此之外,因为我的需求是每60桢才截取一桢画面,所以我将判断写在了retrieve方法前面,这 是因为grab方法只是获取下一帧却并不进行解码,而retrieve方法则是解码并返回下一帧,所以retrieve方法要慢于grab方法,所以当不需要当前的帧或画面时,可以使用grab跳过。
  • 10
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值