opencv视频处理、播放

	最近做项目需要对视频进行分析,故写了个方便分析视频的代码。主要功能如下,读取视频后处理播放,其中有几个快捷按键:a返回上一帧,s开启/关闭自动播放,d切换到下一帧,q后退两秒,w将当前图片保存下来,e前进两秒,其他参看代码注释。
import cv2


def draw_something(frame):
    # 画框, 注意:若画的线太细经过缩放线可能消失
    frame = cv2.rectangle(frame, (260, 230), (1660, 690), (0, 0, 255), 2)
    # 图片缩放
    frame = cv2.resize(frame, (1280, 720))
    return frame


path_video = r'J:\路测视频\G410\G410D-1227\G410D-1227\CARDV\RO\20211227175432_000008A.MP4'  # 要播放的视频路径
OutPutImgPath = r'J:\Temp\Temp1'  # 要保存图片的目录
Start = 0  # 从第Start秒播放视频

video = cv2.VideoCapture(path_video)
fps = video.get(cv2.CAP_PROP_FPS)
StarFrame = fps * Start
video.set(cv2.CAP_PROP_POS_FRAMES, StarFrame)
NameNum = 0
auto_model = False
success, frame = video.read()
while success:
    # 图像处理部分,可在函数内画框、画线、缩放
    frame = draw_something(frame)
    cv2.imshow('frame', frame)
    if auto_model:
        key = cv2.waitKey(int(1000 / int(fps)))
    else:
        key = cv2.waitKey(0)
    if ord('w') == key:  # 保存处理后的图片
        NameNum += 1
        if cv2.imwrite(OutPutImgPath + '\\V%05d.jpg' % NameNum, frame):
            print('Write %s successful' % OutPutImgPath + '\\V%05d.jpg' % NameNum)  # 图片保存成功
        else:
            print('Write %s failure!' % OutPutImgPath + '\\V%05d.jpg' % NameNum)  # 图片保存失败,或因为是中文路径
        video.set(cv2.CAP_PROP_POS_FRAMES, StarFrame)
    elif ord('W') == key:  # 保存原图
        video.set(cv2.CAP_PROP_POS_FRAMES, StarFrame)
        success, frame = video.read()
        NameNum += 1
        if cv2.imwrite(OutPutImgPath + '\\V%05d.jpg' % NameNum, frame):
            print('Write %s successful' % OutPutImgPath + '\\S%05d.jpg' % NameNum)  # 图片保存成功
        else:
            print('Write %s failure!' % OutPutImgPath + '\\S%05d.jpg' % NameNum)  # 图片保存失败,或因为是中文路径
        video.set(cv2.CAP_PROP_POS_FRAMES, StarFrame)
    elif ord('a') == key:  # 按下a返回上一帧
        StarFrame -= 1
        video.set(cv2.CAP_PROP_POS_FRAMES, StarFrame)
    elif ord('d') == key:  # 按d切换到下一帧
        StarFrame += 1
    elif ord('s') == key:  # 按s开启/关闭自动播放模式
        auto_model = 1 - auto_model
        StarFrame += 1
    elif ord('e') == key:  # 按e将视频快进2秒
        StarFrame += 2 * fps
        video.set(cv2.CAP_PROP_POS_FRAMES, StarFrame)
    elif ord('q') == key:  # 按q将视频后退两秒
        StarFrame -= 2 * fps
        video.set(cv2.CAP_PROP_POS_FRAMES, StarFrame)
    elif -1 == key:
        StarFrame += 1
    elif -1 != key:
        video.set(cv2.CAP_PROP_POS_FRAMES, StarFrame)

    success, frame = video.read()  # 获取下一帧
video.release()

程序运行时的画面程序运行时的画面
保存图片成功提示保存图片成功提示
保存的图片保存的图片

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值