Opencv 视频读取与写入的实现示例

 更新时间:2023年08月21日 08:26:50   作者:缺点灵气儿  
本文将介绍如何使用OpenCV进行视频读写。通过阅读本文,您将了解如何读取视频文件、处理视频帧、写入视频文件等操作,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧

前言 

视频是由图片组成的, 视频的每一帧就是一幅图片, 一般是30帧, 表示一秒显示30张图片.

  • cv2.VideoCapture可以捕获摄像头, 用数字来表示不同的设备, 比如0, 1
  • 如果是视频文件, 可以直接指定路径即可.

通过路径获取视频内容 

获取视频内容

vc = cv2.VideoCapture(path)

检查是否正确打开

vc.isOpened()  # 可以读到内容返回True

 循环播放

播放视频就是不停的换图像帧,即循环调用  vc.read()    和   cv2.imshow()

完整代码

import cv2
# 打开视频文件
def open_video(path):
    vc = cv2.VideoCapture(path)
    ret = vc.isOpened()  # 可以读到内容返回True
    # 检查是否正确打开
    if ret:
        print("视频打开成功")
    else:
        print("视频打开失败")
        return -1
    print(f"开始播放视频:  {path.split('/').pop()},按esc键退出")
    # 循环读帧播放视频
    while ret:
        # 可以读到内容ret返回True
        ret, frame = vc.read()
        # 读到最后frame就是空
        if frame is None:
            print("视频播放完毕")
            break
        if ret:
            cv2.imshow('{}'.format(path).split('/').pop(), frame)
            # 0xFF == 27表示按esc退出键会退出
            if cv2.waitKey(33) & 0xFF == 27:
                break
    # 释放视频对象
    vc.release()
    # 关闭窗口
    cv2.destroyAllWindows()
open_video("videos/1.mp4")

从摄像头读取视频数据

获取视频设备

cap = cv2.VideoCapture(0)

其他与直接读取视频一致

完整实例

import cv2
# 从摄像头一直读取数据
def camera():
    # 获取视频设备
    cap = cv2.VideoCapture(0)
    print("获取视频设备成功")
    ret = cap.isOpened()
    # 创建窗口
    cv2.namedWindow('video', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('video', 640, 480)
    print("成功创建窗口")
    print("开始播放来自摄像头的视频,按esc键退出)
    while ret:
        # 从摄像头读取视频
        ret, frame = cap.read()
        # 将视频帧放在窗口中显示
        cv2.imshow('video', frame)
        # 等待键盘事件, 按esc键会退出
        if cv2.waitKey(33) & 0xFF == 27:
            break
    # 释放摄像头
    cap.release()
    print("摄像头已关闭")
    # 关闭窗口
    cv2.destroyAllWindows()
camera()

录制视频 

VideoWriter : 参数一为输出文件, 参数二为多媒体文件格式(VideoWriter_fourcc),参数三为帧率, 参数四为分辨率.

  • write 编码并写入缓存
  • release 缓存内容写入磁盘, 并释放资源

用于创建视频编解码器的四字符码(FourCC)

fourcc = cv2.VideoWriter_fourcc(*'mp4v')  

cv2.VideoWriter()

vm = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))

'output.mp4' 是输出视频文件的名称,fourcc 是所选的视频编码器,20 是帧率,(640, 480) 是视频的分辨率。

将视频帧逐帧写入视频文件

vw.write(frame)

完整示例

import cv2
# 录制视频
def record_video():
    # 获取视频设备
    cap = cv2.VideoCapture(1)
    print("获取视频设备成功")
    # *mp4v就是解包操作 等同于  'm', 'p', '4', 'v'
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 用于创建视频编解码器的四字符码(FourCC)。
    # (640, 480)表示摄像头拍视频, 这个大小搞错了也不行,主要是这个分辨率.
    vw = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))
    # 'output.mp4' 是输出视频文件的名称,fourcc 是所选的视频编码器,20 是帧率,(640, 480) 是视频的分辨率。
    print("开始录制来自摄像头的视频,按esc键退出")
    # 循环存帧录制视频
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            print('没有接收到图像')
            break
        vw.write(frame)  # 将视频帧逐帧写入视频文件。
        cv2.imshow('frame', frame)  # 显示录制的帧
        if cv2.waitKey(33) & 0xFF == 27:
            break
    # 释放摄像头
    cap.release()
    print("摄像头已关闭")
record_video()

 到此这篇关于Opencv 视频读取与写入的实现示例的文章就介绍到这了,更多相关Opencv 视频读写内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VS2019配置OpenCV时找不到Microsoft.Cpp.x64.user的解决方法

    VS2019配置OpenCV时找不到Microsoft.Cpp.x64.user的解决方法

    这篇文章主要介绍了VS2019配置OpenCV时找不到Microsoft.Cpp.x64.user的解决方法,需要的朋友可以参考下
    2020-02-02
  • C++函数指针与指针函数有哪些关系和区别

    C++函数指针与指针函数有哪些关系和区别

    函数指针是一个指针变量,它可以存储函数的地址,然后使用函数指针,这篇文章主要介绍了C++中函数指针与指针函数有哪些关系和区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
    2022-08-08
  • C++ LeetCode1812判断国际象棋棋盘格子颜色

    C++ LeetCode1812判断国际象棋棋盘格子颜色

    这篇文章主要为大家介绍了C++ LeetCode1812判断国际象棋棋盘格子颜色, 有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • C语言 structural body结构体详解用法

    C语言 structural body结构体详解用法

    C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项,结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性
    2021-10-10
  • 平衡二叉树的实现实例

    平衡二叉树的实现实例

    这篇文章主要介绍了平衡二叉树的实现实例,需要的朋友可以参考下
    2014-02-02
  • C语言超详细i讲解双向链表

    C语言超详细i讲解双向链表

    在实际生活中,我们用到的最多的两种链表结构就是单链表和双向带头链表,上一篇已经介绍了单链表的实现以及一些应用,接下来我为大家详细介绍一下双向链表,以及一些链表oj题
    2022-05-05
  • c语言读取csv文件和c++读取csv文件示例分享

    c语言读取csv文件和c++读取csv文件示例分享

    这篇文章主要介绍了c语言读取csv文件和c++读取csv文件示例,需要的朋友可以参考下
    2014-03-03
  • 基于MFC实现单个文档的文件读写

    基于MFC实现单个文档的文件读写

    这篇文章主要为大家详细介绍了如何基于MFC实现单个文档的文件读写功能,文中的示例代码讲解详细,对我们学习有一定帮助,感兴趣的可以了解一下
    2022-07-07
  • C语言用Easyx绘制围棋和象棋的棋盘

    C语言用Easyx绘制围棋和象棋的棋盘

    这篇文章主要为大家详细介绍了C语言用Easyx绘制围棋和象棋的棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C++编写实现图书管理系统

    C++编写实现图书管理系统

    这篇文章主要为大家详细介绍了C++编写实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论