基于Opencv-python 实现视频按帧截取图片
发布日期:2021-05-07 13:15:32 浏览次数:34 分类:原创文章

本文共 3520 字,大约阅读时间需要 11 分钟。

采集到一些视频数据,需要将里面的视频按照指定帧截图。

参考了很多资料后,实现了自己的功能:

1.安装所需要的库:

pip3 install -i https://mirrors.aliyun.com/pypi/simple +库名

pip3 install -i https://mirrors.aliyun.com/pypi/simple opencv-python

2.编写代码,实现需求:

default--间隔的帧数   2.input/output--输入视频的路径、存放截取图片的路径 (将路径放入后面的‘ '中即可)前面加r可表示绝对路径

"""@File : deal_videos.py@Author: LZW@Date : 2021/01/15@Desc : 截取视频中的图像"""# 引入所需要的库import cv2import argparseimport osdef parse_args(num):    """    Parse input arguments    """    n = ''    n = n + str(num)    parser = argparse.ArgumentParser(description='Process pic')    parser.add_argument('--input', help='video to process', dest='input', default=None, type=str)    parser.add_argument('--output', help='pic to store', dest='output', default=None, type=str)    # default为间隔多少帧截取一张图片    parser.add_argument('--skip_frame', dest='skip_frame', help='skip number of video', default=100, type=int)    # input为输入视频的路径 ,output为输出存放图片的路径    input = 'F:\西南医院视频(压缩版)\\' + n + '.avi'  # 读取的文件目录    out = 'F:\output_videos\\' + n  # 输出的文件目录    args = parser.parse_args(['--input', input, '--output', out])    return argsdef process_video(i_video, o_video, num):    cap = cv2.VideoCapture(i_video)    num_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT)    expand_name = '.jpg'    if not cap.isOpened():        print("Please check the path.")    cnt = 0    count = 0    while 1:        ret, frame = cap.read()        cnt += 1        #  how many frame to cut        if cnt % num == 0:            count += 1            cv2.imwrite(os.path.join(o_video, str(count) + expand_name), frame)        if not ret:            breakif __name__ == '__main__':    start = 71    end = 107    for i in range(start, end):        args = parse_args(i)        if not os.path.exists(args.output):            os.makedirs(args.output)        print('Called with args:')        print(args)        process_video(args.input, args.output, args.skip_frame)

运行结果:

原文作者地址我忘记了,若原文作者看到可以告知我下。

原代码:

"""@Description 将视频按照指定帧切分成图片@Author LZW@CreateTime 2021/02/09 17:14@UpdateTime 2021/02/09 17:14@Version 1.0.0"""# 引入所需要的库import cv2import argparseimport osdef parse_args():    """    Parse input arguments    """    parser = argparse.ArgumentParser(description='Process pic')    parser.add_argument('--input', help='video to process', dest='input', default=None, type=str)    parser.add_argument('--output', help='pic to store', dest='output', default=None, type=str)    # default为间隔多少帧截取一张图片    parser.add_argument('--skip_frame', dest='skip_frame', help='skip number of video', default=100, type=int)    # input为输入视频的路径 ,output为输出存放图片的路径    args = parser.parse_args(['--input', r'F:\西南医院视频(压缩版)\80.mp4', '--output', r'F:\output_videos\80'])    return argsdef process_video(i_video, o_video, num):    cap = cv2.VideoCapture(i_video)    num_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT)    expand_name = '.jpg'    if not cap.isOpened():        print("Please check the path.")    cnt = 0    count = 0    while 1:        ret, frame = cap.read()        cnt += 1        #  how        # many        # frame        # to        # cut        if cnt % num == 0:            count += 1            cv2.imwrite(os.path.join(o_video, str(count) + expand_name), frame)        if not ret:            breakif __name__ == '__main__':    args = parse_args()    if not os.path.exists(args.output):        os.makedirs(args.output)    print('Called with args:')    print(args)    process_video(args.input, args.output, args.skip_frame)

使用要修改的地方:

default--间隔的帧数   2.input/output--输入视频的路径、存放截取图片的路径 (将路径放入后面的‘ '中即可)前面加r可表示绝对路径

上一篇:大数据学习之wordcount
下一篇:基于Ubuntu(桌面版)搭建Hadoop伪分布式环境

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月19日 06时41分03秒