Python利用VideoCapture读取视频或摄像头并进行保存

 更新时间:2022年07月01日 08:52:20   作者:AI算法联盟  
这篇文章主要为大家介绍一下OpenCV中cv2.VideoCapture函数的使用,并利用cv2.VideoCapture读取视频或摄像头以及进行保存帧图像或视频,感兴趣的小伙伴可以了解一下

一、语法:cap = cv2.VideoCapture(0)

说明:参数0表示默认为笔记本的内置第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径路径,例如:cap=cv2.VideoCapture('video.mp4')

二、语法:cap.isOpened()

说明:判断视频对象是否成功读取,成功读取视频对象返回True。

三、语法:ret,frame = cap.read()

说明:按帧读取视频,返回值ret是布尔型,正确读取则返回True,读取失败或读取视频结尾则会返回False。frame为每一帧的图像,这里图像是三维矩阵,即frame.shape = (640,480,3),读取的图像为BGR格式。

四、语法:key = cv2.waitKey(1)

说明:等待键盘输入,参数1表示延时1ms切换到下一帧,参数为0表示显示当前帧,相当于暂停。

五、读取摄像头并保存为视频代码演示

import cv2
 
def videocapture():
    cap=cv2.VideoCapture(0)     #生成读取摄像头对象
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  #获取视频的宽度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  #获取视频的高度
    fps = cap.get(cv2.CAP_PROP_FPS) #获取视频的帧率
    fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))    #视频的编码
    #定义视频对象输出
    writer = cv2.VideoWriter("video_result.mp4", fourcc, fps, (width, height))
    while cap.isOpened():
        ret, frame = cap.read() #读取摄像头画面
        cv2.imshow('teswell', frame) #显示画面
        key = cv2.waitKey(24)
        writer.write(frame)  #视频保存
        # 按Q退出
        if key == ord('q'):
            break
    cap.release()         #释放摄像头
    cv2.destroyAllWindows() #释放所有显示图像窗口
 
if __name__ == '__main__' :
 
    videocapture()

六、读取视频并按帧进行保存代码演示:

import numpy as np
import cv2
import os
 
def video2image(video_dir,save_dir):
    cap = cv2.VideoCapture(video_dir) #生成读取视频对象
    n = 1   #计数
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))    #获取视频的宽度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))   #获取视频的高度
    fps = cap.get(cv2.CAP_PROP_FPS)    #获取视频的帧率
    fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))    #视频的编码
    # 定义视频输出
    #writer = cv2.VideoWriter("teswellvideo_02_result.mp4", fourcc, fps, (width, height))
    i = 0
    timeF = int(fps)     #视频帧计数间隔频率
    while cap.isOpened():
        ret,frame = cap.read() #按帧读取视频
        #到视频结尾时终止
        if ret is False :
            break
        #每隔timeF帧进行存储操作
        if (n % timeF == 0) :
            i += 1
            print('保存第 %s 张图像' % i)
            save_image_dir = os.path.join(save_dir,'%s.jpg' % i)
            print('save_image_dir: ', save_image_dir)
            cv2.imwrite(save_image_dir,frame) #保存视频帧图像
        n = n + 1
        cv2.waitKey(1) #延时1ms
    cap.release() #释放视频对象
 
#读取文件夹所有视频,每个视频按帧保存图像
def video2image_multi(video_path,save_path):
    video_list = os.listdir(video_path)
    
    for i in range(len(video_list)) :      
        video_dir = os.path.join(video_path,video_list[i])
        cap = cv2.VideoCapture(video_dir)
        fps = cap.get(cv2.CAP_PROP_FPS)     # 视频的帧率
        save_num = 0
        n = 1           #计数
        timeF = int(fps)          # 视频帧计数间隔频率
        while cap.isOpened():
            ret,frame = cap.read()
            if ret is False :
                break
            #每隔timeF帧进行存储操作
            if (n % timeF == 0) :
                save_num += 1
                save_image_dir = os.path.join(save_path,'%s_%s.jpg' % (i,save_num))
                cv2.imwrite(save_image_dir,frame)
            n = n + 1
            cv2.waitKey(1)
        cap.release()
        print('读取第 %s 个视频完成 !!!' % i)
 
if __name__ == '__main__' :
 
    video_to_image(r'E:\AI\video.mp4', r'E:\AI\video2image')

以上就是Python利用VideoCapture读取视频或摄像头并进行保存的详细内容,更多关于Python VideoCapture读取视频 摄像头的资料请关注脚本之家其它相关文章!

相关文章

  • 简单的Python动态可视化神器,编程小白也能上手

    简单的Python动态可视化神器,编程小白也能上手

    这篇文章就来介绍简单的Python动态可视化神器,最近发现了一个宝藏动态可视化库,非常简单,即使是小白也能轻松上手。这个库就是motionchart,它能够用 pandas 的 dataframe 数据直接创建交互式的动态图表,下面来简单看一下如何使用。

    2021-10-10
  • python枚举类型定义与使用讲解

    python枚举类型定义与使用讲解

    在python中枚举是一种类(Enum,IntEnum),存放在enum模块中。枚举类型可以给一组标签赋予一组特定的值,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • 解决django框架model中外键不落实到数据库问题

    解决django框架model中外键不落实到数据库问题

    这篇文章主要介绍了解决django框架model中外键不落实到数据库问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python使用PyYAML库读写yaml文件的方法

    Python使用PyYAML库读写yaml文件的方法

    这篇文章主要介绍了Python使用PyYAML库读写yaml文件的方法,包括YAML基本概念介绍及YAML语法知识,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Python+PyQt5实现数据库表格动态增删改

    Python+PyQt5实现数据库表格动态增删改

    这篇文章主要为大家介绍如何利用Python中的PyQt5模块实现对数据库表格的动态增删改,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-03-03
  • plt.title()中文无法显示的问题解决

    plt.title()中文无法显示的问题解决

    本文主要介绍了plt.title()中文无法显示的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Python设置默认编码为utf8的方法

    Python设置默认编码为utf8的方法

    这篇文章主要介绍了Python设置默认编码为utf8的方法,结合实例形式分析了Python针对文件编码的设置方法与相关注意事项,需要的朋友可以参考下
    2016-07-07
  • 掌握Python property装饰器巧妙管理类的属性

    掌握Python property装饰器巧妙管理类的属性

    property 是Python中的一个内置装饰器,它用于创建属性并允许开发者定义特定的操作,例如获取(getter)、设置(setter)和删除(deleter)属性值的方法,本文为大家讲解如何利用这种特性使我们能更好地管理类的属性
    2024-01-01
  • PyTorch搭建LSTM实现多变量时序负荷预测

    PyTorch搭建LSTM实现多变量时序负荷预测

    这篇文章主要为大家介绍了PyTorch搭建LSTM实现多变量时间序列预测及负荷预测,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python的Django框架中消息通知的计数器实现教程

    Python的Django框架中消息通知的计数器实现教程

    通知的计数器非常有用,新通知时+1和读过通知后的-1是最基本的功能,这里我们就来看一下Python的Django框架中消息通知的计数器实现教程
    2016-06-06

最新评论