【Python】OpenCV读取视频帧并保存为图片

这篇具有很好参考价值的文章主要介绍了【Python】OpenCV读取视频帧并保存为图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

cv2.VideoCapture()读取视频帧

import cv2  # 代入OpenCV模块
VIDEO_PATH = 'video.mp4'  # 视频地址
video = cv2.VideoCapture(video_path)  # 实例化视频对象
retval, frame = video.read()  # 逐帧读取
  • vid = cv2.VideoCapture(0)

    • VideoCapture()中参数是0,表示打开笔记本的内置摄像头
    • 参数是视频文件路径则打开视频,如vid= cv2.VideoCapture('video.mp4')
  • retval, frame = vid.read()

    • vid.read()按帧读取视频
    • retval, frame是获vic.read()方法的两个返回值。其中retval是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False;frame就是每一帧的图像,是个三维矩阵

 

计算FPS的两种方法

FPS: Frame Per Second 每秒传输帧数

通俗来讲就是指动画或视频的画面数,每秒钟帧数越多,所显示的动作就会越流畅

  • video.get(cv2.CAP_PROP_FPS)video.get(cv2.cv.CAP_PROP_FPS)
    • 对于本地视频文件来讲,可以直接从get(CAP_PROP_FPS)get(CV_CAP_PROP_FPS)获取每秒的帧数
  • 手动计算:总帧数 / 总时间
    • 对于网络摄像头和许多其他连接摄像头,必须手动计算每秒的帧数,也就是可以从视频中读取一定数量的帧,并查看计算这些帧需要花费多少时间

 

读取视频帧并保存为图片

# coding=utf-8
# 使用OpenCV视频中提取帧图片并保存(cv2.VideoCapture)
import os
import cv2
import shutil
import time

# 全局变量
VIDEO_PATH = 'videos/test_video3.mp4'  # 视频地址
EXTRACT_FOLDER = 'test'  # 存放帧图片的位置
EXTRACT_FREQUENCY = 10  # 帧提取频率


# 主操作
def extract_frames(video_path, dst_folder, index):
    # 实例化视频对象
    video = cv2.VideoCapture(video_path)
    frame_count = 0

    # 循环遍历视频中的所有帧
    while True:
        # 逐帧读取
        _, frame = video.read()
        if frame is None:
            break
        # 按照设置的频率保存图片
        if frame_count % EXTRACT_FREQUENCY == 0:
            # 设置保存文件名
            save_path = "{}/{:>03d}.jpg".format(dst_folder, index)
            # 保存图片
            cv2.imwrite(save_path, frame)
            index += 1  # 保存图片数+1
        frame_count += 1  # 读取视频帧数+1

    # 视频总帧数
    print(f'the number of frames: {frame_count}')
    # 打印出所提取图片的总数
    print("Totally save {:d} imgs".format(index - 1))

    # 计算FPS 方法一 get()
    (major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')  # Find OpenCV version
    # (major_ver, minor_ver, subminor_ver) = (4, 5, 4)
    if int(major_ver) < 3:
        fps = video.get(cv2.cv.CV_CAP_PROP_FPS)  # 获取当前版本opencv的FPS
        print("Frames per second using video.get(cv2.cv.CV_CAP_PROP_FPS): {0}".format(fps))
    else:
        fps = video.get(cv2.CAP_PROP_FPS)  # 获取当前版本opencv的FPS
        print("Frames per second using video.get(cv2.CAP_PROP_FPS) : {0}".format(fps))

    # 计算FPS 方法二 手动计算 总帧数 / 总时间
    # new_vid = cv2.VideoCapture(video_path)
    # start = time.time()  # 开始时间
    # c = 0
    # while True:
    #     _, frames = new_vid.read()
    #     if frames is None:
    #         break
    #     c += 1
    # end = time.time()  # 结束时间
    # fps2 = c / (end - start)  # 总帧数 / 总时间
    # print(f'frames:{c}')
    # print(f'seconds:{end - start}')
    # print("Frames per second using frames / seconds : {0}".format(fps2))
    # new_vid.release()

    # 最后释放掉实例化的视频
    video.release()


def main():
    # 递归删除之前存放帧图片的文件夹,并新建一个
    try:
        shutil.rmtree(EXTRACT_FOLDER)
    except OSError:
        pass
    os.mkdir(EXTRACT_FOLDER)
    # 抽取帧图片,并保存到指定路径
    extract_frames(VIDEO_PATH, EXTRACT_FOLDER, 1)


if __name__ == '__main__':
    main()

 

Reference

opencv: 视频中提取帧图片并保存(cv2.VideoCapture)

使用python-opencv读取视频,计算视频总帧数及FPS的实现

OpenCV 计算fps(frames per second-fps)文章来源地址https://www.toymoban.com/news/detail-411784.html

到了这里,关于【Python】OpenCV读取视频帧并保存为图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Python|OpenCV-读取视频,显示视频并保存视频(3)

    前言 本文是该专栏的第3篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在使用OpenCV处理视频的时候,不论是摄像头画面还是视频文件,通常情况下都要使用VideoCapture类来进行每一帧图像的处理。对于OpenCV而言,只要使用视频文件作为参数,它就可以打开视频文

    2024年02月11日
    浏览(11)
  • cv2读取视频-并保存图像或视频

    @TOC cv2读取视频的一般流程 获取视频 cap = cv2.VideoCapture() 判断获取的视频是否成功,成功读取视频对象则返回True。 cap.isOpened() 按帧读取 ret, frame = cap.read() 展示图像 cv2.waitKey(1) 读取本地文件视频并展示

    2024年02月11日
    浏览(12)
  • OpenCV中读取、显示、保存摄像头视频讲解与实战(附Python源码)

    OpenCV中读取、显示、保存摄像头视频讲解与实战(附Python源码)

    需要源码请点赞关注收藏后评论区留言私信~~~ OpenCV不仅能够处理图像,还能够处理视频。视频是由大量的图像构成的,这些图像以固定的时间间隔从视频中获取。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到处理视频的目的。要处理视频,需要先对视频进

    2024年02月05日
    浏览(12)
  • python-opencv将视频逐帧保存为图片

    python-opencv将视频逐帧保存为图片

    本文使用python-opencv将本地视频逐帧保存为图片(.jpg)格式,将保存的图片放在当前目录的一个文件夹内。 环境:python3.7 需要python库:opencv(cv2),os,time 代码如下: 将需要保存图片的视频文件放置在与程序同一目录下 运行结果,当前目录下出现以时间命名的文件夹,里面保存

    2024年02月15日
    浏览(8)
  • opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)

    opencv常用 读视频函数 cv2.VideoCapture 、 cv2.VideoCapture.get 等,可以参考这里 opencv常用 写视频函数 cv2.VideoWriter 等可以参考这里 ,其中视频格式可以参考这里 videoCapture.read() 是按帧读取视频, ret,frame 是获 .read() 方法的两个返回值。其中 ret 是布尔值,如果读取帧是正确的则返回

    2023年04月08日
    浏览(182)
  • OpenCV基础操作_图片读取和保存

    OpenCV基础操作_图片读取和保存

    目录 1 图片读取 2 图片保存 在OpenCV中,加载图片采用imread()函数。 函数详细说明在:Reading and Writing Images and Video — OpenCV 2.4.13.7 documentation Python:   cv2. imread (filename[, flags])  函数功能: imread 功能是加载图像文件成为一个 Mat 对象。 imread支持的文件类型有: Windows bitmaps

    2023年04月19日
    浏览(9)
  • 关于OpenCV中cv2.imwrite保存的图片是全黑色的解决方案

    原因:image图片是0-255,而imwrite保存图片的时候把图片标准化了,也就变为0-1,对于这个问题,只需要修改一下imwrite的输入就好,也就是括号后半部分那个参数*255,如下: 注意:括号里边的前半部分是自己起的文件名,后半部分“img_light”改成你自己的图像名。 比如我读入

    2024年02月16日
    浏览(14)
  • cv2.VideoCapture使用,opencv读取摄像头,视频图像

            cv2.VideoCapture()用于读取视频,也可以用于读取摄像头图像。         上面的2种写法,第一种表示读取摄像头,第二种读取视频文件,返回值就是视频数据。         在读取到视频后,可以使用isOpened方法来判断视频是否能够打开,能打开返回True,不能够打

    2024年02月12日
    浏览(12)
  • opencv从视频文件读取视频内容,从摄像头读取保存视频内容

    opencv从视频文件读取视频内容,从摄像头读取保存视频内容

    (1)argparse模块使编写用户友好的命令行接口变得容易。 (2)程序定义了它需要的参数,而argparse将找出如何从sys.argv中解析这些参数。 (3)argparse模块还会自动生成帮助和使用消息,并在用户给程序提供无效参数时发出错误信息。 import argparse # 导入库 parser = argparse.Argume

    2024年02月22日
    浏览(13)
  • OpenCV实现视频的读取、显示、保存

    OpenCV实现视频的读取、显示、保存

    目录 1,从文件中读取视频并播放 1.2代码实现 1.3效果展示 2,保存视频 2.1    代码实现 2.2   结果展示 下面将详细介绍如何使用OpenCV实现视频的读取、显示和保存,并解释其原理。 视频读取: 使用OpenCV可以通过 cv2.VideoCapture 类来读取视频文件。该类提供了一系列方法用于操

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包